レンダラーはAngular 4.0.0-rc.1で非推奨になりました。以下の更新をお読みください
angular2方法が使用されlisten
たりlistenGlobal
からレンダラ
たとえば、コンポーネントにクリックイベントを追加する場合は、レンダラーとElementRefを使用する必要があります(これにより、ViewChild、またはを取得するものを使用するオプションも提供されますnativeElement
)。
constructor(elementRef: ElementRef, renderer: Renderer) {
// Listen to click events in the component
renderer.listen(elementRef.nativeElement, 'click', (event) => {
// Do something with 'event'
})
);
あなたは使用することができますlistenGlobal
それはあなたへのアクセスを与えるdocument
、body
など
renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
beta.2ための両方ことに注意してくださいlisten
とlistenGlobal
(参照リスナーを除去する機能を返す変更破壊 beta.2ための変更ログから部)。これは、大きなアプリケーションでのメモリリークを回避するためです(#6686を参照)。
したがって、動的に追加したリスナーを削除するには、返される関数を保持する変数に、listen
またはlistenGlobal
変数に割り当ててから、それを実行する必要があります。
// listenFunc will hold the function returned by "renderer.listen"
listenFunc: Function;
// globalListenFunc will hold the function returned by "renderer.listenGlobal"
globalListenFunc: Function;
constructor(elementRef: ElementRef, renderer: Renderer) {
// We cache the function "listen" returns
this.listenFunc = renderer.listen(elementRef.nativeElement, 'click', (event) => {
// Do something with 'event'
});
// We cache the function "listenGlobal" returns
this.globalListenFunc = renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
}
ngOnDestroy() {
// We execute both functions to remove the respectives listeners
// Removes "listen" listener
this.listenFunc();
// Removs "listenGlobal" listener
this.globalListenFunc();
}
以下は、動作例を示すplnkrです。この例には、listen
およびの使用法が含まれていますlistenGlobal
。
Angular 4.0.0-rc.1 +でのRendererV2の使用(4.0.0-rc.3以降のRenderer2)
RendererV2
listenGlobal
グローバルイベント(ドキュメント、ボディ、ウィンドウ)に対する機能がなくなりました。listen
両方の機能を実現する機能しかありません。
参考までに、DOMレンダラー実装のソースコードは変更される可能性があるため、コピーして貼り付けています(そうです、角張っています!)。
listen(target: 'window'|'document'|'body'|any, event: string, callback: (event: any) => boolean):
() => void {
if (typeof target === 'string') {
return <() => void>this.eventManager.addGlobalEventListener(
target, event, decoratePreventDefault(callback));
}
return <() => void>this.eventManager.addEventListener(
target, event, decoratePreventDefault(callback)) as() => void;
}
ご覧のとおり、文字列(ドキュメント、ボディ、ウィンドウ)を渡すかどうかを確認します。その場合、内部addGlobalEventListener
関数を使用します。それ以外の場合、要素(nativeElement)を渡すと、単純なaddEventListener
リスナーを削除するにはRenderer
、角度2.xの場合と同じです。listen
関数を返し、その関数を呼び出します。
例
// Add listeners
let global = this.renderer.listen('document', 'click', (evt) => {
console.log('Clicking the document', evt);
})
let simple = this.renderer.listen(this.myButton.nativeElement, 'click', (evt) => {
console.log('Clicking the button', evt);
});
// Remove listeners
global();
simple();
plnkrで角度4.0.0-rc.1使用RendererV2を
plnkrで角度4.0.0-rc.3使用Renderer2を