2013-12-15 25 views
13

を使用してhtml tableをレンダリングします。私のコントローラはそのようになっています。あなたが見ることができるように、私は定期的に$scope.foo配列を更新しています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 
    }); 
}); 

。しかし、私の見解はこれと同様に構成されています

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

問題がある、私はfooを更新するとき、それは新しいデータで私のテーブルを再レンダリングされません。

この問題についてはどうすればよいですか?

+0

こんにちは、ng-repeatリストの上部に項目を追加する方法はよく分かりますか?私は私のリストを更新することができます - 新しいアイテムがレンダリングされますが、それはリストの一番下に移動します。 – lulu88

答えて

25

あなたは

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

で更新をラップしましたか?これは問題を解決するはずです。

+4

また、変更後に$ scope。$ apply()を置くこともできます。 – WMios

3

あなたはおそらくのように、あなたがリストを更新する際ダイジェストサイクルを行うために、角度強制的に$apply()を呼び出す必要があります:あなたはソケットからメッセージを取得するたびにあなただけのバインドする必要があり、私のためのコードの作業後

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

私にエラーが表示されます: 'Uncaught TypeError:オブジェクト#にはメソッド 'apply''がありません –

+0

@JanNetherdrakeお願いします。http://jimhoskins.com/2012/12/17/angularjs-and-apply .html –

+0

@JanNetherdrake 'apply'ではなく '$ apply'です。 – lex82

0

あなたのコードは$ scope内にあります。$ apply()function

socket.on = function (e) { 

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

     }; 
関連する問題