2016-07-07 4 views
1

非常に単純なAngularJSアプリケーションをセットアップしようとしていますが、$watch$applyを実行するのに問題があります。

私は(今のところ)私はJSONオブジェクト内の受信アレイの長さを表示したいです。私はウォッチャーをセットアップして、私のService-dataをバインドして$ applyコールを表示して置くように設定しましたが、何とかしてもこれはうまくいきません。 $apply()私の見解を取り外すとき

(それゆえ、私は他のすべてのようになって働くと仮定)更新しているが、それは以前の値を更新しています。

HTML:

<div ng-controller="scandataCtrl"> 
    {{scandata.length}} 
</div> 

Javascriptを:

app.controller('scandataCtrl',['$scope', 'DataHandler', function($scope, DataHandler) { 

    $scope.scandata = DataHandler.getScanData(); 

    $scope.$watch(
     function(){ 
      return DataHandler.getScanData(); 
     }, 
     function(newVal, oldVal){ 
      $scope.$apply(function(){ 
       $scope.scandata = DataHandler.getScanData(); 
      }); 
    }); 

}]); 


app.service('DataHandler', function() 
{ 
    var scanresult = []; 

    this.getScanData = function() 
    { 
     return scanresult; 
    }; 

    this.msgreceive = function(msg) 
    { 
     var msgobj = JSON.parse(msg); 
     switch (msgobj.MessageType) 
     { 
      case 'SCANRESULT': 
       scanresult = msgobj.MessageData.myArray; 
       break; 
      default: 
       alert("error: undefined message received") 
       break; 
     } 
    }; 
}); 

私は多くのことをグーグルが、それを把握coudn't。

+2

それはあなたが起こることを期待し、代わりに何が起こるかは不明です。しかし、$応募は一切必要ありません。ちょうど '$ scope.scandata = newVal;'を実行してください –

+0

さて、私はボタンをクリックしてWebsocketメッセージ要求を開始しています。メッセージを受信し、状態を変更するため、「古い」値 – Draz

+0

を更新次に、あなたが(適用$を呼び出す必要があります)機能で - 私はimmidiately私のビューを更新したいではなく、それはボタンの上に別のクリックの後、更新の答えをreveivingした後、角度を知らずにあなたのサービスのあなたのウォッチャーではありません。 $ apply()を使用して以前に作成されていない場合、ウォッチャーは変更を検出できません。 –

答えて

-1

あなたは$applyの代わりに$timeoutを使用する必要があります。

$scope.$watch(function(){ 
    return DataHandler.getScanData(); 
}, function(newVal, oldVal){ 
    $timeout(function(){ 
     $scope.scandata = DataHandler.getScanData(); 
    }); 
}); 

タイムアウトは、内部$applyを呼び出すが、ダイジェストの例外をスローしません安全な方法で進行にすでにあるだろう。

+0

@downvoter、議決権を行使するのではなく、問題が何であるかを説明してください。 –

+0

これはうまくいかなかった! (私はdownvoteしませんでした) – Draz

+0

あなたはこの問題を再現するplunkrやフィドルを提供してください。 –

関連する問題