0

angular-selectizeモジュールで AngularJS を使用しています。

必要な要素をページに入力するには、次のようなものを使用します。

index.html

<selectize
    ng-repeat="select in selects_data track by $index"
    config="selectizeConfig"
    options="select.options"
    ng-model="selects_models[select.name]">
</selectize>

controller.js

$scope.update_data = function(){
    //I'm using AngularJS resource to get the JSON data from the server
    $scope.selects_data = StatesTableControl.get({'path': $scope.element.path},
        function(data){
            //Success
            angular.forEach(data, function(item){
                $scope.selects_models[item.name] = item.current_id
            });
        }, function(error){
            //Error
        }
    );
};

$scope.update_data();
$interval($scope.update_data, 3000);

を使っtrack by $indexても使わなくても、サーバーから取得したデータで配列を更新するたびに、更新後の配列の内容が同じであってもtrack by select.name、すべての要素が完全に再描画されます。<selectize></selectize>selects_data

自分で解決するためのレシピは見つかりませんでした。そして、それを内部または他の要素track byで使用すると、なぜ同じことが役立つのか理解できません。div

誰かが問題を解決してくれると本当にうれしいです!

4

1 に答える 1

0

アイテムの追跡方法とは何の関係もないと思います。呼び出すたびに新しいオブジェクトを返す場合StatesTableControl.get、角度は、同じデータが含まれていても、それらを異なるオブジェクトと見なしていると思います。

変更されたオブジェクトのみを送信するか、オブジェクトのバージョン番号を維持して、変更されていないオブジェクトを認識し、それらを置き換えないようにすることができます。

于 2015-10-31T12:33:43.020 に答える