Angular 2: привязка хоста и прослушивание хоста
Как использовать прослушиватель хоста и привязку хоста в angularjs 2?
Я пробовал это для слушателя хоста, но всегда показывал ошибку "Ожидаемая декларация".
app.component.ts:
import {Component, EventEmitter, HostListener, Directive} from 'angular2/core';
@Directive({
selector: 'button[counting]'
})
class HostSample {
public click = new EventEmitter();
@HostListener('click', ['$event.target']);
onClickBtn(btn){
alert('host listener');
}
}
@Component({
selector: 'test',
template: '<button counting></button>',
directives: [HostSample]
})
export class AppComponent {
constructor(){
}
}
Ответы
Ответ 1
@HostListener
является декоратором метода обратного вызова/события, поэтому удалите ;
в конце этой строки:
@HostListener('click', ['$event.target']);
Здесь работает plunker, который я создал, скопировав код из API docs, но я поместил метод onClick()
в одну строку для ясности:
import {Component, HostListener, Directive} from 'angular2/core';
@Directive({selector: 'button[counting]'})
class CountClicks {
numberOfClicks = 0;
@HostListener('click', ['$event.target']) onClick(btn) {
console.log("button", btn, "number of clicks:", this.numberOfClicks++);
}
}
@Component({
selector: 'my-app',
template: `<button counting>Increment</button>`,
directives: [CountClicks]
})
export class AppComponent {
constructor() { console.clear(); }
}
Связывание хоста также может использоваться для прослушивания глобальных событий:
Чтобы прослушивать глобальные события, к имени события должна быть добавлена цель. Цель может быть окном, документом или телом (ссылка)
@HostListener('document:keyup', ['$event'])
handleKeyboardEvent(kbdEvent: KeyboardEvent) { ... }
Ответ 2
Это простой пример использования обоих из них:
import { Директива, HostListener, HostBinding } от '@ angular/core';
@Directive({
selector: '[Highlight]'
})
export class HighlightDirective {
@HostListener('mouseenter') mouseover() {
this.backgroundColor = 'green';
};
@HostListener('mouseleave') mouseleave() {
this.backgroundColor = 'white';
}
@HostBinding('style.backgroundColor') get setColor() {
return this.backgroundColor;
};
private backgroundColor = 'white';
constructor() {}
}
Введение:
- HostListener может привязывать событие к элементу.
- HostBinding может привязывать стиль к элементу.
-
это директива, поэтому мы можем использовать ее для
Некоторые тексты
-
Итак, согласно отладке, мы можем обнаружить, что этот div привязан
style = "background-color: white"
Некоторые тексты
-
мы также можем обнаружить, что EventListener этого div имеет два события: mouseenter
и mouseleave
. Поэтому, когда мы перемещаем мышь в div, цвет станет зеленым, мышь уйдет, цвет станет белым.
Ответ 3
@HostListener('click', ['$event.target']);
удалите ;
, как указано @BhaRathi RajaMani в комментарии к ответу @mark Rajcok