非常に単純な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。
それはあなたが起こることを期待し、代わりに何が起こるかは不明です。しかし、$応募は一切必要ありません。ちょうど '$ scope.scandata = newVal;'を実行してください –
さて、私はボタンをクリックしてWebsocketメッセージ要求を開始しています。メッセージを受信し、状態を変更するため、「古い」値 – Draz
を更新次に、あなたが(適用$を呼び出す必要があります)機能で - 私はimmidiately私のビューを更新したいではなく、それはボタンの上に別のクリックの後、更新の答えをreveivingした後、角度を知らずにあなたのサービスのあなたのウォッチャーではありません。 $ apply()を使用して以前に作成されていない場合、ウォッチャーは変更を検出できません。 –