Есть ли разница (производительность), если я запускаю ng-repeat над объектом или функцией, которая возвращает объект - PullRequest
0 голосов
/ 27 августа 2018

Я связываю массив в моем сервисе с локальной областью действия в controller (передача по ссылке):

myApp.controller('TheController', function($scope, theService){
    $scope.theArray = theService.array;
})

в службе :

//...
theService.array = [];
    $http.get('/array').then(function(data){
        theService.array = angular.extends(theService.array, data);// here I'm updating theService.array with new values;
    })

Проблема с этой привязкой заключается в том, что я не могу разорвать ссылку на исходный массив. поэтому мне нужно сделать какую-то дополнительную функцию, чтобы определить разницу между новым и старым массивом.

Обходным путем будет каждый раз инициализировать массив и возвращать функцию в моем сервисе :

$http.get('/array').then(function(data){
        theService.array = data;
    })

theService.getArray = function(){
    return theService.array;
    };

в контроллере это будет:

myApp.controller('TheController', function($scope, theService){
        $scope.theArray = theService.getArray;
    })

по моему html (и вот в чем вопрос) у меня будет:

<div ng-repeat="data in theArray()">....</div>

вместо <div ng-repeat="data in theArray ">....</div>

Есть ли проблемы с производительностью в ng-repeat?

1 Ответ

0 голосов
/ 27 августа 2018

Насколько мне известно, в циклах дайджеста AngularJS все функции в шаблоне будут вызываться снова (например, то, что происходит, когда вы помещаете функцию в ng-if), и они могут вызывать другие циклы дайджеста. быть запущенным.

См. это и это для дальнейшего описания, хотя они на самом деле не обсуждают этот вопрос особенно.

Поэтому я бы предпочел запустить ng-repeat над объектом и периодически обновлять значения, когда они действительно должны быть обновлены.

...