我結合的滾動事件捕捉滾動並用它做什麼,我創建了一個指令,像波紋管:防止原生瀏覽器事件(如滾動)燒製而成變化檢測
所以我必須簡單指令,它有什麼,但:
constructor (private el : ElementRef ,
private renderer : Renderer) {
this.domAdapter = new browser.BrowserDomAdapter();
this.ruler = new Ruler(this.domAdapter);
}
ngAfterViewInit() : any {
this.renderer.listenGlobal('window' , 'scroll' ,()=> {
console.log('scrolling');
});
return undefined;
}
這是工作的罰款,期望我能看到它在觸發滾動變化檢測我的所有應用程序。
這是在我的組件之一:
private aFunction() {
console.log('change detected !!!');
}
我在模板中有aFunction
地方在一些組件:
<div>{{ aFunction() }}</div>
此前,aFunction
被炒魷魚了,只有當我更新了一些輸入或點擊一個按鈕,但現在,它正在滾動的變化檢測!因此,我的滾動體驗是滯後的!
這是Angular2的正常行爲,所有的事件都應該觸發change檢測,但我想從這條規則中排除我的滾動事件。
簡而言之,如何在Angular2中定義一個事件,並轉化爲觸發變化檢測並使其成爲手動的能力。
我在尋找:
this.renderer.listenGlobalButDontFireTheChangeDetection
謝謝隊友,我不能使用第一個,因爲我不想改變我所有的組件變更檢測策略,第二個和第三個看起來完全像我想要的,請你詳細說明他們嗎?他們有什麼不同? – Milad
這解決了我的問題,第二和第三都工作正常,有什麼區別? 我想使用Renderer使我的代碼web工作人員友好,您的答案更像是使用Renderer,爲什麼?你能解釋一下嗎? – Milad
是的,我會盡快寫出 – yurzui