2013-12-15 15 views
13

मैं प्रस्तुत करने के लिए ng-repeat का उपयोग करता हूं। मेरे नियंत्रक तो दिखाई देता है:AngularJS ngRepeat अद्यतन मॉडल

app.controller("fooCtrl", function($scope, WebSocket) { 
    $scope.foo = [ ... ]; 

    WebSocket.start(function(data) { 
    // this is a callback on websocket.onmessage 
    // here is a for loop iterating through $scope.foo objects and updating them 
    }); 
}); 

आप देख सकते हैं, मैं समय-समय पर $scope.foo सरणी को अद्यतन करने कर रहा हूँ। हालांकि, मेरे विचार तो तरह का निर्माण किया है:

<tr ng-repeat="item in foo"> 
    ... 
</tr> 

समस्या है, जब मैं अद्यतन foo, है ना मेरी मेज नए डेटा के साथ फिर से प्रस्तुत करना है।

मैं इस समस्या के बारे में कैसे जाऊं?

+0

हाय, क्या आप शायद एनजी-दोहराना सूची के शीर्ष पर कोई आइटम कैसे जोड़ सकते हैं? मैं अपनी सूची अपडेट कर सकता हूं - नया आइटम प्रस्तुत किया जाता है, लेकिन यह सूची के नीचे जाता है। – lulu88

उत्तर

25

आप

$scope.$apply(function() { 
    // update goes here 
}); 

में अद्यतन लपेट दिया? इससे समस्या हल हो जानी चाहिए। मेरे लिए कोड काम के बाद जब भी आप सॉकेट से संदेश मिलता है तो आप सिर्फ बाध्य करने के लिए की जरूरत है

WebSocket.start(function(data) { 
    $scope.$apply(function(){ 
     /* your stuff goes here*/ 
    }); 
    }); 
+4

इसके अतिरिक्त, आप केवल $ स्कोप डाल सकते हैं। परिवर्तन के बाद $ लागू() लागू करें। – WMios

3

आप शायद $apply() कॉल करने के लिए एक डाइजेस्ट चक्र करने के लिए कोणीय मजबूर करने के लिए जब आप सूची अद्यतन, जरूरत की तरह आपका कोड $ स्कोप के अंदर। $ लागू करें() फ़ंक्शन

socket.on = function (e) { 

      $scope.$apply(function() { 
       // update you UI over here 
      }); 

     }; 
+0

मुझे एक त्रुटि देता है: 'Uncaught TypeError: ऑब्जेक्ट # में कोई विधि' लागू 'नहीं है –

+0

@JanNetherdrake कृपया, इस लेख को विवरण के साथ देखें: http://jimhoskins.com/2012/12/17/angularjs-and-apply .html –

+0

@JanNetherdrake यह 'लागू' है, 'लागू नहीं' है। – lex82

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