【问题标题】:How to get Angular to increment counter while alert popup is visible?如何在警报弹出可见时让Angular增加计数器?
【发布时间】: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


【解决方案1】:

这是默认行为。当浏览器对话框打开时脚本执行停止。 解决方法是获取警报和更新计数器之间的时间差,另一种方法是创建自己的模式

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多