2016-06-12 18 views
0

AngularJSのサービスとコントローラの間でデータを共有しようとしています。
私はそれについて読んだことがあり、私のコードはうまくいくはずですが、そうではありません。サービスとコントローラ間でデータを共有する

これは私のコントローラです:

function udpController($scope,$interval,udpService) { 
    $scope.status = udpService.status; 
    $interval(function(){udpService.changeStatus();},2500); 
} 

そして、これは私のサービスです。

angular.module('udpTest').service('udpService' ,function() { 
     var self = this; 
     this.status; 

     this.changeStatus = function() { 
       self.status = Math.random(); 
     } 
} 

$scope.statusは全く変わりません。
ありがとうございます。

答えて

-1

値がすでにundefinedに更新されている場合は、スタック内のすべての関数の後に$intervalが呼び出されます。この下の

$interval(function(){udpService.changeStatus();},2500); 

変更:udpService.changeStatus();は、非同期呼び出しがある場合は、再度

$interval(function(){udpService.changeStatus();$scope.status =udpService.status; },2500); 

が、promises(resolved, rejected)$qサービスを利用するためにはるかに良いでしょう。

+0

しかし、changeStatus();何も返さず、単に変数の値を変更します。 –

+0

したがって、$ interval(function(){$ scope.status = udpService.changeStatus();}、2500)を使用するだけです。 – Thalaivar

+0

'changeStatus()'が何かを返しても何も返さないと仮定します。 – charlietfl

1

最初に値を割り当てていますが、$ intervalで呼び出される関数は$ scope.statusの値が更新されることを知らないためです。だから、このような関数の中に含める必要があります:

function udpController($scope,$interval,udpService) { 

    $interval(function(){ 
     udpService.changeStatus(); 
     $scope.status = udpService.status; 
    },2500); 
} 
関連する問題