$rootScope:inprog

由于$apply 会触发dirty-checking(脏数据检查),使界面重新读取controller数据,常用于数据改变了,但界面没刷新。此问题常见于$apply包裹着已经可以刷新界面的操作。
例如:
$scope.apply(function() {
$scope.a = 10; // 这句本来就能刷新界面
})

解决方法:

  1. 直接写$scope.a = 10 //这是因为使用不当,一般不会这样,因为不知道哪个操作会刷新界面,但是推荐的是找到会刷新界面的语句,把它移出$apply

  2. 将$apply换成$evalAsync, 下面是对$evalAsync的生命周期解释

    directive: dom 操作 => $evalAsync => render
    controller: $evalAsync => dom操作 => redner
    $timeout: dom操作 => render => $evalAsync

    简言之:$evalAsync是将操作加入当前或者写一个$apply循环中,从而避免多次dirty-checking

参考:
https://stackoverflow.com/questions/17301572/whats-the-difference-between-evalasync-and-timeout-in-angularjs
https://www.panda-os.com/blog/2015/01/angularjs-apply-digest-and-evalasync/

你可能感兴趣的:($rootScope:inprog)