Первый способ
Я думаю, если вы зависите от этого значения в вашей директиве, тогда следует реализовать метод там:
@Directive({
selector: 'button[promiseDirective]'
})
// ....
@HostListener('click', ['$event'])
public clickEventHandler(event: MouseEvent) {
// Call your service here
}
И удалить это (click)
из вашего тега кнопкипоскольку ваша директива сама обрабатывает события кликов с помощью @HostListener
:
<button class="btn" promiseDirective></button>
Второй способ:
Или вы можете добавить еще один @Input
без изменения ядра вашего методатам означает:
@Directive({
selector: 'button[promiseDirective]'
})
@Input() valueOfPromise;
// ....
ngOnChanges() // <-- would be invoked once @Input() value is updated
console.log(this.valueOfPromise);
}
Не забудьте импортировать и реализовать интерфейс OnChanges
в своем классе директивы, тогда ваш фрагмент кода должен выглядеть следующим образом:
<button [valueOfPromise]="returnedValue" (click)="chain()" class="btn" promiseDirective></button>
И для соответствующегоTS часть кнопки:
public returnedValue;
chain() {
// Call your service
this.returnedValue = data // <-- data is your returned data from service
}
Здесь вам больше не нужно @HostListener
.