的blur
事件不會泡沫,因此我們需要直接監聽每個輸入元素。 Angular爲這種情況提供了一個很好的解決方案。
一個適用於模板內所有輸入元素的指令。
這個指令使用主機監聽監聽所有元素blur
比賽時,選擇應用和轉發冒泡input-blur
事件:
@Directive({
selector: 'input,select',
host: {'(blur)': 'onBlur($event)'}
})
class BlurForwarder {
constructor(private elRef:ElementRef, private renderer:Renderer) {}
onBlur($event) {
this.renderer.invokeElementMethod(this.elRef.nativeElement,
'dispatchEvent',
[new CustomEvent('input-blur', { bubbles: true })]);
// or just
// el.dispatchEvent(new CustomEvent('input-blur', { bubbles: true }));
// if you don't care about webworker compatibility
}
}
通過添加BlurForwarder
指令directives: [...]
這將是應用於其模板中與選擇器匹配的所有元素。
主機監聽監聽冒泡input-blur
事件並調用事件處理程序:
@Component({
selector: 'my-component',
directives: [BlurForwarder],
host: {'(input-blur)':'onInputBlur($event)'},
template: `
<form>
<input type="text" [(ngModel)]="xxx">
<input type="text" [(ngModel)]="yyy">
<input type="text" [(ngModel)]="zzz">
</form>`
}) {
onInputBlur(event) {
doSomething();
}
}
甜蜜的回答,現在要實現... TX作爲總是Gunter .... – born2net
SWEEEEET ....剛剛測試過,它的工作很棒!你是曼特曼!我可以從 – born2net
@GünterZöchbauer的表格中刪除我所有的(更改)=「onChange($ event)」,您是否有替代rc6的解決方案?我相信指令在該版本中已被棄用。謝謝! – PBandJen