2014-01-06 3 views
15

これは専門家には非常に明白なそれらの愚かな質問の1つになります。スコープが変更されたときにAngularJSがテンプレート変数を更新しない

データを格納しているコントローラにデータをプッシュしようとしているサービスにデータをプッシュするwebsocketがあります。

データが入ってくると、変数が、UI更新のみを更新している私は、そのデータに対してアクションを実行します

services.factory('Summary', ['$q','$rootScope','$http', '$location', function ($q, $rootScope,$http, $location) { 

var Service = {}; 
Service.dataObj = {}; 
Service.dataObj.d = {"gello":"goodbye"}; 
.... 
function listener(data) { 
    messageObj = data; 
    Service.dataObj.d = data; 
    console.log("Received data from websocket: ", messageObj); 

} 
})]); 


controllers.controller('UserCtrl', ['$scope', 'Summary', 
function ($scope, Summary) { 

    $scope.click = function(){ 
     alert(JSON.stringify($scope.summaryinfo)); 
    } 
    $scope.summaryinfo = [Summary.dataObj]; 
    $scope.summarygridOptions = { 
     data: 'summaryinfo' 
    }; 
    console.log("hello"); 
}]); 

データがで汲み上げ取得し、限り、私は知っていたとして、そのが保存されているので、 Service.dataObjでHTMLテンプレートを指すとオブジェクトが更新されていて置き換えられていないので、ポインタは残っていてオブジェクトは監視されます。

しかし、私はclick()メソッドを実行しない限り、IMはアラートをトリガするだけでUIに影響します。

私には何が欠けていますか?あなたはおそらく$apply()を使用する必要が

+0

変更を適用するには$ applyを適用してください。 – Daiwei

+0

あなたの質問を見て3分で解決しました!ありがとうbugg_tb! – rastko

答えて

21

$(適用)は、角度の枠組みの外からの角度で式を実行するために使用されます。 (たとえば、ブラウザのDOMイベント、setTimeout、XHR、または第三者のライブラリから)。

function listener(data) { 
    $scope.$apply(function() { 
     Service.dataObj.d = data; 
    }); 
} 
+0

ありがとう、それは明らかだろう。私は別のプロジェクトで同様の呼び出しを持っていますが、$ applyに頼らないので、はっきりと初期化は異なっていなければなりません。今まで何か新しいことを学ぶために:) –

関連する問題