Я пытаюсь написать директива атрибута Angular2, чтобы изменить поведение некоторых элементов. Более конкретно, я хочу применить атрибут к определенным элементам, которые имеют обработчики кликов и предотвращают выполнение связанной функции при определенных условиях.Angular2 Директива для изменения обработки кликов
Так что теперь у меня есть элемент т.д .:
<button (click)="onClick(param1, param2)"></button>
OnClick является функцией, объявленной на компонент, который размещен элемент кнопки делает некоторую работу.
То, что я хотел бы сделать, это написать что-то вроде:
<button (click)="onClick(param1, param2)" online-only></button>
и есть директива, как:
@Directive({
selector: '[online-only]',
})
export class OnlineOnlyDirective {
@HostListener('click', ['$event'])
onClick(e) {
if(someCondition){
e.preventDefault();
e.stopPropagation();
}
}
}
Но нажми обработчик выполняется первым, таким образом, не давая свою директиву возможности остановить его выполнение.
Второй подход, который я думал о замене (щелчок) моим собственным обработчиком, например ([онлайнClick] = "onClick") и выполнить переданную функцию, когда директива считает нужным, но таким образом я не могу передать параметры функции onClick и немного страннее смотреть.
У вас есть мысли по поводу чего-то подобного?
Yeap, гораздо лучше возьмите мой описанный 2-й подход. Использование EventEmitter вместо передачи в функцию для вызова имеет значение. Первый подход был бы более изящным, но, вероятно, не поддерживается угловым2, как вы сказали. – masimplo
Просто любопытно, должен ли селектор быть «[онлайн-только]»? Попытка выяснить, что случилось с этой директивой. –
Я не знаю, связано ли или как «онлайн-только» с вопросом –