0

サーバーは、アプリの状態の変更を送信できます。私のアプリがそのような変更を受け取ると、次の関数が呼び出されます:(実際のアプリコードでは、この関数はグローバルスコープに含まれていません)

function(message){
    data = window.JSON.parse(message.data);
    console.log(data);
    for(element in data){
        if(element[0] == "_"){continue;}
        $scope.state[element] = data[element];
    }
}

また、状態オブジェクトのクローンを作成し、操作が完了したらスコープにアタッチして戻すことで、これを実行しようとしました。

クローン関数は次のようになります。

var clone = (function(){
    return function (obj) { Clone.prototype=obj; return new Clone() };
    function Clone(){}
}());

そして、データを受信する私の関数は次のようになります。

function(message){
    data = window.JSON.parse(message.data);
    console.log(data);
    var cloned = new clone($scope.state);
    for(element in data){
        if(element[0] == "_"){continue;}
        cloned[element] = data[element];
    }
    $scope.state = cloned;
}

これをテストするための要素がコントローラーにありました。

<div ng-controller='MainController'>
    {{ state | json}}
</di>

そしてそれはただ更新されていません。

バインディングが機能し続けるように、事前に名前がわからないプロパティを追加/変更する別の方法はありますか?

4

1 に答える 1

1

呼んでい$scope.$apply()ますか?

データが非同期で戻ってくる場合は、スコープを更新する前に、AngularがUIの更新をすでに完了している可能性があります。試してみて、それが機能するかどうかを確認してください。そうでない場合は、おそらくより多くの情報が必要になります。

于 2012-10-25T01:41:12.540 に答える