Bindonce с нг-повтором

Я использовал Bindonce улучшить производительность ng-repeat,

Но у меня есть одна проблема: коллекция, которая используется из ng-repeat немного позже заполняется данными (запрос данных из API занимает некоторое время), поэтому он пуст, потому что обновление предотвращается Bindonce,

Как я могу указать, чтобы ждать ответа от сервера, а затем сделать привязку?


Пример кода:

В контроллере у меня есть массив $scope.requests = [];

Инициализируется с фабрикой

$scope.requests = CurrentUserData.getRequests();

Я читал об обещаниях и думал, что этот код может помочь:

CurrentUserData.getRequests()
            .then(function(response) {
                $scope.requests = response;
            });

Но я получаю ошибку

angular.js:11655 TypeError: CurrentUserData.getRequests(...). Тогда не является функцией

2 ответа

Решение

CurrentUserData.getRequests(...) не возвращает обещание.

Если вы будете использовать код

CurrentUserData.getRequests()
            .then(function(response) {
                $scope.requests = response;
            });

тогда линия $scope.requests = response следует изменить на $scope.requests = response.data

Сказав, что вы можете использовать оригинальный код

$scope.myData = CurrentUserData.getRequests();
$scope.$watch(myData,
              function(newVal, oldVal){
                     $scope.requests = newVal
              });

Наиболее вероятная причина: ваша функция getRequests в CurrectUserData не возвращает обещание, она должна возвращать $http.get('/the/url/etc')

Другие вопросы по тегам