2016-02-18 13 views
9

मैं ngModel पर परिवर्तनों को कैसे सुन सकता हूं? समस्या: यह है कि यदि मैं मॉडल को एक्सेस करते समय दिए गए फ़ंक्शन में तत्व को लिंक (बदलें) या (क्लिक) करता हूं, तो यह अभी भी नहीं बदला जाता है। अगर मैं बदल गया मॉडल से 500ms के सेटटाइम जोड़ूं। कोई विचार है कि मैं सेटटाइमआउट के बिना असली बदली वस्तु कैसे प्राप्त कर सकता हूं जो बहुत खराब तरीका है? html में कोड:कोणीय 2 मॉडल परिवर्तन पर सुनें

<input type="checkbox" (click)="autoJoinToggle()" [(ngModel)]='active.bookmark.autoJoin'> Autojoin 

घटक में कोड:

console.log(this.active.bookmark.autoJoin) // returns the current value (before the change) 
setTimeout(() => {console.log(this.active.bookmark.autoJoin);}, 500); //returns the value after the change 

मैं कोणीय नियंत्रण के साथ ऐसा नहीं कर सकते, क्योंकि मैं मॉडल आबद्ध और "सक्रिय" वस्तु की जरूरत है पहली जगह में मौजूद नहीं है , और यदि मैं "सक्रिय" परिभाषित होने के बाद नियंत्रण के मान को अद्यतन करना चाहता हूं, तो मुझे "सक्रिय" ऑब्जेक्ट (जो ओवरटाइम बदलता है) पर परिवर्तनों को सुनना होगा। स्थानीय समस्या और @ViewChild के साथ एक ही समस्या है -> मुझे अभी भी "सक्रिय" परिवर्तन कब पता होना चाहिए ताकि मैं स्थानीय चर को भी अपडेट कर सकूं।

यहाँ के रूप में अच्छी तरह से एक gif है: enter image description here

उत्तर

7
(ngModelChange)="doSomething($event)" 

या

autoJoinToggle(cb){ this.active.bookmark.autoJoin = cb; //do something.. } 

<input #cb type="checkbox" (click)="autoJoinToggle(cb.checked)" 
    [(ngModel)]='active.bookmark.autoJoin'> 

मुझे लगता है कि व्यवहार तुम समझा एक बग हालांकि और एक पुल अनुरोध पहले से ही प्रदान की जाती है, लेकिन नहीं जोड़ा https://github.com/angular/angular/issues/6311

+1

स्थानीय चर + ngModel होने के साथ यह समाधान काम करता है लेकिन DoSomething समारोह में मैं स्पष्ट रूप से सेट 'this.active.autoJoin = cb.checked' जो मुझे लगता है कि इस मुद्दे को जब तक अस्थायी समाधान के लिए ठीक है –

+0

आप जोड़ सकते हैं ठीक हो गई है' autoJoinToggle (सीबी) { this.active.bookmark.autoJoin = cb; // कुछ करें .. } ' तो यह देखने के लिए किसी और के लिए पूरा समाधान होगा –

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