【发布时间】:2015-09-26 08:12:28
【问题描述】:
我有this example,这是一个带有删除项目选项的基本列表。
当用户尝试删除某些内容时,需要确认。而且,为了演示将删除哪个项目,我有条件地更改了表格行的颜色。
问题是,如果在confirm() 语句之前不使用$scope.$apply(),我无法更改所选行的颜色。
$scope.removeEntry = function(index) {
$scope.entries[index].toBeRemoved = true;
$scope.$apply();
if (confirm("Are you sure you want to delete this item?") === true) {
$scope.entries.splice(index, 1);
}else{
$scope.entries[index].toBeRemoved = false;
}
};
但这给了我:
错误:[$rootScope:inprog] $apply 已经在进行中
我是否遗漏了什么,或者有什么更好的方法可以防止这种情况发生?
我已经尝试了this answer 上的几乎所有建议,但均未成功。
【问题讨论】:
-
您尝试过
$timeout解决方案吗?没有帮助吗? -
为什么不带任何参数调用 $scope.apply() ? apply is used to evaluate an argument you pass it
-
我看到它在不使用
$scope.$apply();的情况下工作。请删除此行后再试。 -
@Vineet:摘要循环将被阻塞
confirm打断,Patrick 需要在此之前完成。 -
@Vineet:这都是问题所在。他设置了一个属性来突出显示表格中的一行。要在 UI 中反映此更改,必须运行并完成摘要循环。并且必须在
confirm弹出模态之前完成。
标签: angularjs