2017-04-12 16 views
6

मेरे पास कई बच्चों के साथ एक कोणीय 2 घटक है। प्रदर्शन समस्याओं के कारण, मैं यह जांचना चाहता था कि चेंजडिएक्शन कितनी बार मेरे बच्चे-घटकों की जांच करता है। तो मैंने ngAfterView चेक किया - मेरे बच्चे के घटकों में से एक का लॉगबैक लॉग किया।कोणीय 2: चेंजडेटेशन और मूसोम घटना

मुझे एहसास हुआ कि मेरी माता पिता घटक एक MouseMove() -callback है और इसलिए मेरे बच्चों ngAfterViewChecked हर बार मैं माता-पिता पर मेरे माउस ले जाते हैं कहा जाता हो जाता है। लेकिन मैं अपने mousemove() -कॉलबैक में किसी भी घटक चर अद्यतन नहीं कर रहा हूं। चेंजडेटेशन बच्चों के लिए क्यों चल रहा है और मैं इसे कैसे रोक सकता हूं?

आशा है कि आप लोग समस्या को समझें (अगर टिप्पणी न करें, तो मैं चीजों को साफ़ कर सकता हूं)। आपकी सहायता के लिए Thx!

+0

[यह आलेख आपके लिए है] (https://blog.thoughtram.io/angular/2017/02/21/using-zones-in-angular-for-better-performance.html) –

+0

thx इतना, वास्तव में मैं क्या खोज रहा था! – ant45de

उत्तर

4

साइट peeskillet प्रदान की शो ChangeDetection से eventlistener बहिष्कृत करने का तरीका:

import { Component, NgZone } from '@angular/core'; 

@Component(...) 
export class AppComponent { 
... 
    element: HTMLElement; 

    constructor(private zone: NgZone) {} 

    mouseDown(event) { 
    ... 
    this.element = event.target; 

    this.zone.runOutsideAngular(() => { 
     window.document.addEventListener('mousemove', this.mouseMove.bind(this)); 
    }); 
    } 

    mouseMove(event) { 
    event.preventDefault(); 
    this.element.setAttribute('x', event.clientX + this.clientX + 'px'); 
    this.element.setAttribute('y', event.clientX + this.clientY + 'px'); 
    } 
} 

अधिक जानकारी के लिए मैं वास्तव में इस article सिफारिश कर सकते हैं। बिग THX peeskillet करने के लिए!

+0

धन्यवाद, मैंने 'zone.runOutsideAngular (..' को ईवेंट हैंडलर के अंदर रखने की कोशिश की। इससे मुझे समस्या को हल करने में मदद मिली। – Arg0n

+0

यह इस बात पर निर्भर करता है कि आप अपने ईवेंट श्रोता के अंदर क्या करना चाहते हैं। सभी उपयोग-मामलों की आवश्यकता नहीं है अलग क्षेत्र। लेकिन खुशी है कि यह आपके लिए काम करता है। – ant45de

संबंधित मुद्दे