1

У меня есть диалог «добавить друга», когда вы добавляете пользователя, он возвращается в историю состояний и должен обновлять список друзей. Все работает отлично, за исключением того, что список не показывает новый пользователя - хотя оба console.log s показывают правильные данные:

[e, e, e, $promise: Promise, $resolved: true] 

(3 e корректно, у меня было два раньше).

$scope.add = function (user, goback) { 
    if (goback) 
    $ionicHistory.goBack(); 
    $ionicLoading.show(); 
    ApiService.friends.request(user._id, function (data, status, headers, cfg) { 
    $scope.users = ApiService.users.friends(function (res, headers) { 
     $ionicLoading.hide(); 
     console.log($scope.users); 
    }); 
    console.log($scope.users); 
    }); 
} 

Я попытался обертывание $scope.users = вещи в $scope.$apply или позвонив по телефону, что в разных местах, но только (по праву) поднимает $digest already in progress ошибки (потому что automaticall $ ресурса делает это).

Что происходит, и как я могу это исправить?


wtf Продолжается? Я просто попытался просто сделать это:

$scope.add = function (user, goback) { 
    $scope.users = []; 
} 

(и даже упаковка $scope.users = [] в $ применяется), но ничего не происходит! Но $ scope.add вызывается из ng-click директивы - это должно работать!


Обнаружили ошибку!

Мой друг, где add получил вызов, конечно, имел свой собственный объем. Это довольно грязно, но в итоге я использовал $scope.$parent.users вместо $scope.users для хранения данных.

ответ

0

Как я уже говорил в OP, это была очень простая ошибка в области, поскольку я забыл, что я фактически переключал вид ui-router между двумя действиями, поэтому мои $scope.users были на самом деле двумя разными вещами.

Перемещение списка на $scope.$parent.users исправляет его, хотя, думая об этом снова, я, вероятно, должен переместить значение в контроллер и использовать синтаксис MyController as ctrl.

1

Недавно я столкнулся с этой проблемой. По-видимому, обещания $q, используемые в $resource, разрешаются только в течение $digest цикла по дизайну (см. https://github.com/angular/angular.js/issues/2881), поэтому вы получаете эту ошибку при обработке $scope.$apply.

Обойти это обернуть назначение в $timeout, чтобы заставить другой цикл дайджеста, например:

$timeout(function() { 
    $scope.users = ApiService.users.friends(); // Abbreviated 
}); 

Я не 100% уверен, почему вы присваиваете результат ApiService.users.friends() к $scope.users так как я Думаю, этот метод возвращает обещание, но я мог бы пропустить больший контекст.

+0

'users.friends' - это запрос $ resource (' method: GET, isArray: true'). – sol

+0

, и это все еще ничего не делает ... любой отладочный вывод консоли после назначения все еще печатает список из трех элементов. – sol

Смежные вопросы