Я разрабатываю приложение в ng2, и я борюсь с чем-то. Я создаю календарь, в котором вы можете выбрать диапазон дат, и мне нужно реагировать на события click
и mouseenter/mouseleave
на ячейках дня. Поэтому у меня есть код (упрощенный):
calendar.component.html
<month>
<day *ngFor="let day of days" (click)="handleClick()"
(mouseenter)="handleMouseEnter()"
(mouseleave)="handleMouseLeave()"
[innerHTML]="day"></day>
</month>
Но это дает мне сотни отдельных прослушивателей событий в памяти браузера (каждая ячейка дня получает 3 прослушивателя событий, и я могу отображать до 12 месяцев одновременно, так что это будет более 1k слушателей).
Итак, я хотел сделать это "надлежащим образом", используя метод "делегирование событий". Я имею в виду, присоединить событие click к родительскому компоненту (month
), и когда он получит событие click, просто проверьте, произошло ли это на компоненте Day
, и только тогда я бы отреагировал на этот клик. Что-то вроде jQuery делает в нем on() метод, когда вы передаете ему параметр selector
.
Но я делал это, ссылаясь на элементы DOM изначально в коде обработчика:
month.component.ts
private handleClick(event) {
if (event.target.tagName === 'DAY') {
// handle day click
} else {
// handle other cases
}
}
и мои коллеги отвергли мою идею, поскольку, как они сказали, "должен быть более простой и правильный способ обработки этого в NG2, как в jQuery. Кроме того, он выходит из-под контроля здесь - вы реагируете to Day clicks в коде месяца."
Итак, мой вопрос: есть ли лучший способ? Или я пытаюсь решить проблему, которую я больше не должен беспокоить, поскольку устройства пользователей все больше и больше потребляют память/обработку?
Спасибо заранее!