2013-04-10 16 views
18

सबसे पहले अंदर बुलाया और सबसे महत्वपूर्ण, plunker: http://plnkr.co/edit/v1uTz5कोणीय - अपडेट नहीं हो ngModel जब ngInclude

यह समस्या मैं में चल रहा हूँ के एक कार्य प्रदर्शन है।

मेरे पास आंशिक शामिल करने के लिए ng-include है।

आंशिक के अंदर मेरे पास ngModel और निर्देश के साथ एक टेक्स्ट इनपुट है।

इसके अनुसार मॉडल अपडेट शामिल हैं, लेकिन इसमें शामिल किसी भी बातचीत को अनदेखा किया जाता है। शामिल के बाहर {{test}} अपडेट नहीं है, लेकिन {{test}} अंदर करता है।

निर्देश, जिसे कॉल किया जाता है, enter कुंजी को संभालता है और सही दायरा और कार्य को कॉल करता है। हालांकि, $scope.test चर अद्यतन नहीं किया गया है, लेकिन $scope.testFinal अद्यतन किया गया है और ng-include टेम्पलेट उचित रूप से प्रस्तुत करता है। $scope.test मॉडल रीसेट करने का प्रयास कर रहा है या तो काम नहीं करता है।

क्या मुझे यहां कुछ याद आ रही है? या यह निर्देश के साथ या ng-include के साथ एक बग है?

+0

देखें http://stackoverflow.com/questions/11412410/angularjs-losing-scope-when-using-ng-include –

उत्तर

30

चर परिभाषित करने के लिए प्राथमिकता का उपयोग करने के बजाय, इसे एक ऑब्जेक्ट बनाएं।

$scope.model={test:''}; 

निर्देश प्रत्येक आइटम के लिए अपना स्वयं का दायरा बनाते हैं। जब आप एक नए स्कोप वैरिएबल के लिए एक आदिम समीकरण करते हैं, तो मूल के लिए कोई बाध्यकारी नहीं होता है, हालांकि मूल एक वस्तु है, एक संदर्भ बनाया गया है, प्रतिलिपि नहीं है, और एक में किए गए परिवर्तन अन्य

सरल में प्रतिबिंबित होंगे व्याख्यात्मक उदाहरण:

var a ='foo'; 
var b= a; 
/* now change a*/ 
a='bar'; 
alert(b) // is still 'foo' 

अब वस्तु के साथ भी ऐसा ही:

var obj_1= {a:'foo'}; 
var obj_2=obj_1; 
/* now change obj_1.a*/ 
obj_1.a='bar'; 
alert(obj_2.a) // change to obj_1 will also change obj_2 and alert returns "bar"*/ 

Your Plunker Modified

Read this article on angular wiki for more detailed explanation

+1

बहुत आसान, और मैं यह सब जानता था, लेकिन मुझे कारण कभी नहीं समझा। लेख के लिए धन्यवाद। यह निश्चित रूप से उनकी साइट पर अधिक प्रतिनिधि होना चाहिए। –

+0

धन्यवाद, आपने मेरे कई घंटे बचाए हैं। –

+0

कोणीय विकी लिंक अब मान्य नहीं है। – Neel

5

जॉन लिंडक्विस्ट के बारे में video है। हालांकि वह काफी समझाता नहीं है कि आपको किसी ऑब्जेक्ट का उपयोग करने की आवश्यकता क्यों है।

मूल रूप से हर बार एक नई गैर पृथक गुंजाइश नहीं है, माता पिता के दायरे के हर संपत्ति नई दायरे में कॉपी किया जाता है और, के रूप में @charlietfl बताया गया है, एक आदिम प्रकार वास्तव में एक "कॉपी" लेकिन वस्तुओं के साथ बनाता है को कॉपी आपको जो मिलता है वह एक संदर्भ है, इसलिए परिवर्तन वैश्विक हैं।

1

ng-include अपना स्वयं का दायरा बनाता है और यह बाहरी दायरे से अलग है। टेम्पलेट के अंदर $scope.test के बजाय this.test का उपयोग करें। यह ठीक से काम करेगा।

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