DOM продолжает восстанавливаться с помощью angular-selectize ng-repeat и отслеживает

0

Я использую 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 или других элементов.

Я буду очень рад, если кто-то поможет в этом вопросе!

  • 0
    Не могли бы вы вставить код, отвечающий за обновление данных selects_data ?
  • 0
    @ConstantinePoltyrev Я расширил пример кода в своем вопросе, надеюсь, это поможет прояснить, что происходит в моем приложении.
Теги:
angularjs-ng-repeat

1 ответ

0

Я не думаю, что это имеет какое-либо отношение к тому, как вы отслеживаете предметы. Если StatesTableControl.get возвращает новые объекты каждый раз, когда вы его вызываете, я думаю, что угловые считают, что они разные объекты, даже если они содержат одни и те же данные.

Вы можете отправлять только те объекты, которые были изменены, или поддерживать номер версии для объектов, чтобы вы знали те, которые не изменились, и вы их не заменяете.

  • 0
    Спасибо за ответ. Когда я использую 'ng-repeat' без опции 'track by', элементы DOM перестраиваются каждый раз, когда изменяется исходный объект или массив. Но если я использую опцию «track by $ index», DOM изменяется только тогда, когда появляются новые элементы или старые элементы исчезают. Он работает с другими html-элементами, такими как <div>, но не работает с элементами <selectize>. Я просто не понимаю почему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню