在角度工厂中,我有一种方法来创建一个新项目,该项目与用户有关联,并且价格要添加到该用户" items"数组(如购物车)。所以我必须查看用户是否在我的本地用户数组中,如果不存在于服务器上,如果没有则创建用户。
代码如下所示:
var saveItem = function (item) {
var user = filterUserById(item.ownerId);
if (user) {
user.createItem(item);
} else {
repository.getUserById(item.ownerId).then(
function (serverUser) {
var userViewModel = repository.getUserViewModel(serverUser);
userViewModel.createItem(item);
users.push(userViewModel);
}
, function () {
user = {
id: item.ownerId,
items: [
createItemDto(item)
]
};
repository.createUser({ id: user.id }, user);
users.push(repository.getUserViewModel(user));
});
}
};
无论哪个"案例"发生(用户被发现,在服务器上或创建并添加)我收到一个错误:
错误:[$ rootScope:inprog] $申请已在进行中 http://errors.angularjs.org/1.3.0-beta.18/ $ rootScope / inprog?P0 =%24apply
我认为这可能与我在我的存储库中使用资源的事实有关,但我不认为资源应该(因为它是角度的一部分......)。这是user.createItem方法,代码:
user.createItem = function (item) {
var resource = userResource
, itemDto = createItemDto(item)
, command = [{
Type: 'add',
Name: 'items',
Value: itemDto
}];
resource.createItem({ id: item.ownerId }, command);
this.items.push(itemDto);
};
你不喜欢!? PLS HLP! :'(
P.S。我没有明确要求在我的代码中的任何地方申请,编译或摘要。
答案 0 :(得分:2)
$('selector').focus();
这与消化周期相撞......解决方案:
$timeout($('selector').focus());
答案 1 :(得分:0)
尝试将您的来电包裹在user.createItem(item)
函数中的$timeout
:
$timeout(function() {
user.createItem(item);
}, 0);
你可能会以某种其他方式触发对$scope.$apply()
的其他调用。
或者,尝试使用$scope.$evalAsync(function())
以下是一些不错的信息:inprog