试着理解为什么在这种情况下我需要使用$ scope。$ apply?根据我所读到的关于这个主题的所有信息,我不应该这样做,因为一切都发生在Angular内部?我错过了什么?
在我的控制器中:
$scope.savePreset = function(columns, $event){
$event.preventDefault();
preset.name = prompt("Please enter preset name", "My Preset");
if (preset.name != null) {
preset.columns = $scope.columns;
$scope.presets[preset.name] = preset; // (Object)
// Without $scope.$apply() here, view isn't updated. Why?
alert('Your preset "' + preset.name + '" has been saved.');
$scope.loadPreset(preset.name);
} else {
alert('Please enter a valid name.');
}
}
({-1}}函数在ng-click指令中调用,并且savePreset
有一个ng-repeat,它不会更新。
谢谢, 皮姆
答案 0 :(得分:3)
如评论@Sergiu Paraschiv所述,使用包含在window
中的函数停止了角度$digest
周期,这就是为什么我的建议是使用$window
提供者和$window.prompt
和$ window.alert函数我认为它们会起作用
答案 1 :(得分:1)
〜提示,提醒..将暂停执行代码(阻塞线程),防止像setInterval,setTimeout这样疯狂。
$ digest循环由两个较小的循环组成: 当你做一个提示。使用$ evalAsync,里面的代码在angular之外执行。这通常用setTimeout(0)完成。
所以在一句话中:这是提示的错,你可能会更好地使用一个做同样事情的小部件。
编辑: 抱歉提交给快:这是原始答案: Error: $digest already in progress in angularjs when using alert