2013-03-23 15 views
10

में आइटम जोड़ने पर अपडेट नहीं हो रहा है, मैं एक अजीब समस्या में चल रहा हूं जहां मॉडल में आइटम जोड़ने पर एनजी-सूची का उपयोग करने वाला इनपुट अपडेट नहीं हो रहा है। मैं एक बेला बना लिया है बेहतर मुद्दे को वर्णन करने के: http://jsfiddle.net/rtZY3/एनजी-सूची इनपुट सरणी

// Doesn't update ng-list input 
$scope.tags.push(tag); 

// Does update ng-list input 
var tags = angular.copy($scope.tags); 
tags.push(tag); 
$scope.tags = tags; 

यह अपेक्षित व्यवहार की तरह प्रतीत नहीं होता है, खासकर जब से $scope.tags ठीक से के रूप में ऊपर jsFiddle में <pre> टैग द्वारा सचित्र अद्यतन किया जा रहा है।

+1

यदि @Martin ने समस्या हल कर दी है, तो आपको इसे उत्तर के रूप में चिह्नित करना चाहिए। – Jess

उत्तर

15

ठीक है, तो यह दिलचस्प था। मैंने ngList directive के लिए असीमित AngularJS स्रोत कोड में खोला।

ऐसा लगता है कि पहला उदाहरण फ़ॉर्मेटर फ़ंक्शन को ट्रिगर नहीं करता है, जो फ़ंक्शन है जो सरणी मानों को इनपुट फ़ील्ड में प्रदर्शित अल्पविराम से अलग स्ट्रिंग में विभाजित करता है।

आगे की जांच से पता चलता है कि त्रुटि ngModel निर्देश controller में निहित है। स्वरूपक केवल तभी लागू होते हैं जब मान सख्ती से पिछले मान के बराबर नहीं है, लेकिन चूंकि यह आपके पहले उदाहरण में एक ही सरणी उदाहरण है, इसलिए वह कथन गलत पर मूल्यांकन करता है, और इसलिए टेक्स्ट फ़ील्ड अपडेट नहीं होता है। See the source code

$scope.$watch(function ngModelWatch() { 
    var value = ngModelGet($scope); 

    // $modelValue and value is the same array instance in your first example 
    if (ctrl.$modelValue !== value) { 
     // ... 
    } 
}); 

अपने दूसरे उदाहरण में आप प्रत्येक बार एक नया सरणी उदाहरण बनाते हैं और इसलिए स्वरूपक चलाए जाते हैं।

+1

हू, यह वास्तव में दिलचस्प है; जांच करने के लिए धन्यवाद! मुझे लगता है कि मैं अपने दूसरे उदाहरण के साथ चिपके रहूंगा। –

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