2017-01-23 4 views
6

मेरे पास एक कोणीय घटक है जो गतिशील रूप से विभिन्न प्रकार के घटक स्वयं के अंदर बनाता है। यह OnChanges हुक के माध्यम से बाल घटक @Input गुणों के लिए अपनी गुणों को बांधता है।गतिशील घटकों के लिए कोणीय 2 ऑनपश परिवर्तन का पता लगाने

यह बाध्यकारी ठीक काम करता है जब बच्चे घटक का परिवर्तन पहचान डिफ़ॉल्ट पर सेट होता है। फिर नए इनपुट का पता लगाया जाता है और घटक टेम्पलेट अद्यतन किया जाता है।

हालांकि, यह पता नहीं चलता है कि पता लगाने पर ऑनपश है, तो परिवर्तन नहीं पता चला है। मेरा मानना ​​है कि परिवर्तन का पता लगाया जाना चाहिए क्योंकि एक नई अपरिवर्तनीय वस्तु, एक स्ट्रिंग, घटक @Input संपत्ति को असाइन की गई है। https://plnkr.co/edit/0wHQghtww2HXVbC27bC1

मैं इस पैरेंट-टू-गतिशील वाले बच्चे संपत्ति ChangeDetectionStrategy.OnPush साथ काम करने के लिए बाध्य कैसे प्राप्त कर सकते हैं:

यहाँ एक plunker प्रदर्शित करने के लिए है?

+0

रुचि किसी के लिए, ऑनपश चेंज डिटेक्शन गतिशील घटकों के लिए अलग-अलग काम क्यों करता है, इसके बारे में अधिक जानकारी के साथ संबंधित गिटहब समस्या यहां है - https: //github.com/angular/angular/issues/14087 –

उत्तर

3

OnPush घटक के लिए संभव समाधान के रूप में एक साथ सेटर का उपयोग करेंगे cdRef.markForCheck() साथ:

परिवर्तन का पता लगाने-onpush.component.ts

@Component({ 
    selector: 'app-change-detection-onpush', 
    template: ` 
    <div> 
     ChangeDetectionStrategy.OnPush: {{ message || '[blank]' }} 
    </div>`, 
    changeDetection: ChangeDetectionStrategy.OnPush 
}) 
export class ChangeDetectionOnPushComponent implements IMyComponent { 
    private _message: string; 

    constructor(private cdRef: ChangeDetectorRef) {} 

    set message(val: string) { 
    this.cdRef.markForCheck(); 
    this._message = val; 
    } 

    get message() { 
    return this._message; 
    } 
} 

Modified Plunker

+0

ग्रेट समाधान, धन्यवाद @yurzui –

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