【发布时间】:2015-10-29 18:10:50
【问题描述】:
在这个小提琴 (http://jsfiddle.net/edwardtanguay/6pn8tb83/1) 中,Angular 每秒递增一个数字,但是当弹出警报窗口时,计数停止,当我关闭警报窗口时,我收到错误
错误:[$rootScope:inprog] $apply 已经在进行中 http://errors.angularjs.org/1.2.1/$rootScope/inprog?p0=%24apply
这个错误链接实际上将我带到一个页面,该页面似乎在解释我需要做什么,但由于我没有明确使用$scope.$apply() 或$scope.$digest(),我不明白我需要这样做Angular 只是继续递增并在弹出警报窗口时显示递增的数字。
<div ng-controller="MyCtrl">
<div>Angular is counting: {{counter}}</div>
<button ng-click="processFiles()">processFiles</button>
<div>{{message}}</div>
</div>
var myApp = angular.module('myApp',[]);
function MyCtrl($scope, $interval) {
var theTimer = $interval(function () {
$scope.counter++;
}, 1000);
$scope.counter = 0;
$scope.message = 'click button';
$scope.processFiles = function() {
alert('ok');
}
}
【问题讨论】:
-
在我的浏览器中,当我看到警报时计数器停止,但在关闭警报后没有收到任何错误。
-
我认为您应该使用比警报更用户友好的东西,它可能会解决您的问题。例如,参见 Bootstrap 的模态
-
是的,如果我单击警报框关闭得足够快,我也不会收到错误消息,但是如果您在警报打开后等待几秒钟再关闭它,您会看到错误,至少我在 Firefox 中是这样。
-
警报会停止所有正在运行的脚本(检查此答案:stackoverflow.com/a/22973386/5400917),因此按照@Aaron GOUZIT 的建议,您应该使用自定义模式来克服它
-
我认为有些异步可以解决问题。
标签: angularjs