Обработка событий¶
Пользователь всегда взаимодействует с интерфейсом приложения: наводит курсор на элементы, кликает мышкой по элементам web-страницы, нажимает клавиши. Это в свою очередь инициирует возникновение соответствующих событий.
В Angular все события можно отследить и обработать, привязав к ним вызов метода класса.
1 |
|
Здесь нажатие мышкой кнопки с надписью "Show Contacts List" инициирует вызов метода showContacts()
.
Название события всегда должно быть заключено в круглые скобки или предваряться префиксом on-
.
1 2 3 |
|
Каждое возникающее событие передает о себе всю информацию в объекте $event
, который может быть передан методу класса в качестве аргумента.
1 2 3 |
|
Свойства объекта $event
:
target
— элемент DOM, выступивший инициатором;target.value
— значение элемента DOM (справедливо для полей формы);keyCode
— код клавиши (справедливо для keyup).
Перечисленные выше свойства имеются только у стандартных событий браузера. Angular события рассмотрены дальше в этой главе.
1 2 3 4 5 6 7 |
|
Наиболее распространенные события:
click
— нажатие кнопки мыши;mouseenter/mouseleave
— наведение/уход курсора мыши на/с элемента;change
— изменение состояние элемента, применяется к полям формы;focus
— элемента получает фокус, т.е. становится активным;blur
— потеря элементом фокуса;keyup
— возникает, когда отпускается нажатая клавиша.
Для удобства в Angular предусмотрено так называемое псевдо событие keyup.{keyCode}
, которое будет инициировано только в том случае, если будет нажата определенная клавиша. Например, для отслеживания нажатия Enter используется keyup.enter
.
Пользовательские Angular события¶
Часто в сложных приложениях стандартных событий бывает недостаточно и разработчикам приходится реализовывать собственные. За этот функционал отвечает класс EventEmitter
.
Разберем на примере двух компонентов: ContactsComponent
и ContactsItemComponent
.
contacts.component.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
contacts-item.component.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Компонент ContactsItemComponent
входит в состав ContactsComponent
. Необходимо в момент нажатия кнопки в contacts-item
выполнять функцию в contacts
.
Для этого в компоненте contacts-item
создается свойство saveContactPerson
, которое является экземпляром класса EventEmitter
. При создании указывается тип данных, которые будут передаваться событием.
Далее в функции, вызываемой в contacts-item
в момент нажатия кнопки, инициируем возникновение события с помощью метода emit()
класса EventEmitter
, который принимает передаваемые данные.
В app-root
имеется метод catchCustomEvent()
, который принимает объект $event
и вызывается в ответ на возникновение события saveContactPerson
.
Обратите внимание, что название события совпадает с именем свойства, которое является экземпляром класса EventEmitter
.
1 2 3 |
|
Свойства с декораторами @Input()
и @Output()
подробно рассмотрены здесь.
В пользовательских Angular событиях объект $event
содержит значение, переданное методу emit()
.