我有一个“添加朋友”对话框,当您添加用户时,它会返回状态历史记录并应更新好友列表。一切正常,除了列表没有显示新用户 - 即使两个console.log
都显示正确的数据:
[e, e, e, $promise: Promise, $resolved: true]
(3 e
s是正确的,之前我有两个。)
$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
错误(因为$ resource automaticall会这样做)。
发生了什么,我该如何解决这个问题?
wtf正在进行中?我只是试着这样做:
$scope.add = function (user, goback) {
$scope.users = [];
}
(甚至在$ apply中包裹$scope.users = []
)但没有任何反应!
但$ scope.add是从ng-click
指令调用的 - 这应该有效!
我的添加好友视图,其中add
被调用,当然它有自己的$ scope。它非常脏,但我最终使用$scope.$parent.users
代替$scope.users
来保存数据。
答案 0 :(得分: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
,因为我猜这个方法会返回一个承诺,但我可能会错过更大的上下文。
答案 1 :(得分:0)
正如我在OP中所说,这是一个非常基本的范围错误,因为我忘记了我实际上是在两个动作之间切换ui-router
视图,所以我的$scope.users
实际上是两个不同的东西。
将列表移动到$scope.$parent.users
现在修复它,虽然再次考虑它我应该将值移动到控制器并使用MyController as ctrl
语法。