2013-12-15 33 views
13

Tôi sử dụng ng-repeat để hiển thị số html table. Bộ điều khiển của tôi trông giống như vậy:Mô hình cập nhật 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 
    }); 
}); 

Như bạn thấy, tôi đang cập nhật mảng $scope.foo định kỳ. Tuy nhiên, chế độ xem của tôi được tạo như sau:

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

Vấn đề là, khi tôi cập nhật foo, nó không hiển thị lại bảng của tôi bằng dữ liệu mới.

Tôi sẽ giải quyết vấn đề này như thế nào?

+0

Xin chào, bạn có biết cách thêm một mục vào đầu danh sách ng-lặp lại không? Tôi có thể cập nhật danh sách của mình - mục mới được hiển thị nhưng nó sẽ nằm ở cuối danh sách. – lulu88

Trả lời

25

Cậu quấn cập nhật trong

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

? Điều này sẽ giải quyết vấn đề.

+4

Ngoài ra, bạn chỉ cần đặt phạm vi $. $ Apply() sau khi thay đổi. – WMios

3

Bạn có thể cần phải gọi $apply() để buộc góc để làm một chu kỳ tiêu hóa khi bạn cập nhật danh sách, như:

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

Cung cấp cho tôi một lỗi: 'Loại không bắt buộcLỗi: Đối tượng # không có phương pháp 'áp dụng'' –

+0

@JanNetherdrake vui lòng xem bài viết này với mô tả: http://jimhoskins.com/2012/12/17/angularjs-and-apply .html –

+0

@JanNetherdrake 'Áp dụng', không 'áp dụng'. – lex82

0

Tiếp theo việc mã cho tôi, Bất cứ khi nào bạn nhận được tin nhắn từ ổ cắm bạn chỉ cần để ràng buộc mã của bạn bên trong phạm vi $. $ apply() function

socket.on = function (e) { 

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

     }; 
Các vấn đề liên quan