0

我将 AngularJS 与angular-selectize模块一起使用。

要使用我需要的元素填充页面,我使用如下内容:

索引.html

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

控制器.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每次调用它都返回新对象,我认为 Angular 认为它们是不同的对象,即使它们包含相同的数据。

您可以只发送已更改的对象,或维护对象的版本号,以便了解未更改的对象并且不替换它们。

于 2015-10-31T12:33:43.020 回答