रेंडरर को एंगुलर 4.0.0-rc.1 में अपग्रेड किया गया है, नीचे दिए गए अपडेट को पढ़ें
Angular2 तरह से उपयोग करने के लिए है listenया listenGlobalसे प्रतिपादक
उदाहरण के लिए, यदि आप किसी कंपोनेंट में क्लिक ईवेंट जोड़ना चाहते हैं, तो आपको रेंडरर और एलिमेंट रीफ का उपयोग करना होगा (यह आपको व्यूचाइल्ड का उपयोग करने का विकल्प देता है, या जो कुछ भी प्राप्त होता है 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'
});
ध्यान दें कि बीटा.2 के बाद से दोनों listenऔर listenGlobalश्रोता को हटाने के लिए एक फ़ंक्शन लौटाते हैं ( बीटा 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 + (Renderer2 4.0 4.0-rc.3 के साथ) RendererV2 का उपयोग करना
25/02/2017 : Rendererपदावनत कर दिया गया है, अब हमें इसका उपयोग करना चाहिए RendererV2(नीचे पंक्ति देखें)। कमिटमेंट देखें ।
10/03/2017 : RendererV2का नाम बदल दिया गया Renderer2। ब्रेकिंग परिवर्तन देखें ।
RendererV2listenGlobalवैश्विक घटनाओं (दस्तावेज़, निकाय, खिड़की) के लिए कोई अधिक कार्य नहीं है । इसमें केवल एक 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फ़ंक्शन का उपयोग करेगा । किसी अन्य मामले में, जब हम एक तत्व (नेटिवमेंट) पास करते हैं तो यह एक सरल का उपयोग करेगा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