-1

ブロードキャストを行っており、ブロードキャストを聞いているときに、ビューに表示したいスコープの変数を更新しようとしていますが、UI をクリックするまで、変更はすぐにはビューに反映されません。 . この時点で何をすべきか誰でも知っていますが、私は $apply を使用したくありません。ここで、私のコードを見つけてください。

rApp.factory('pService', ['$http', '$rootScope', '$sanitize', 

function ($http, $rootScope, $sanitize) {

 var pService = {};

 //Some other code

 pService.Update=function(status)
 {
   if(status.LastItemId!=undefined)
   {
     pService.disItemId = status.LastItemId;
     $rootScope.$broadcast('updated',pService.disItemId);    
   }
 }

 //Some other code

return pService;

});


rApp.controller('dController', ['$scope','$rootScope' 'pService' ,dController]);

function dController($scope,$rootScope, pService) {

$rootScope.$on('updated',function (event, data) {
            $scope.lastItemId = data; // I want to display the lastItemId on UI
    })
});
4

2 に答える 2

0

何が送信されるイベントをトリガーするか、つまり、サービスのupdate()メソッドがどこで呼び出されるか? 角度の外側から呼び出された場合、適用を使用してダイジェスト サイクルをトリガーする必要がある場合があります。あなたがSignalRを使用しているコメントから、角度でバインディングを更新するためのダイジェストサイクルが作成されないことがわかります。次のように適用で呼び出しをラップしてみてください。

$rootScope.$apply(function(scope) {
    service.Update();
});

も使用する必要はありません。$rootScope.on()使用するだけ$scope.on()です。ルート スコープでのブロードキャストは、すべての子スコープに適用されます。メッセージが他の場所で使用されていない場合は、$rootScope.emit()which を使用して、上にバブルし、すべての子スコープを通過しないようにすることができます。

于 2015-06-05T21:26:28.893 に答える