$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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。