美文网首页
$rootScope:inprog

$rootScope:inprog

作者: yafeo | 来源:发表于2019-02-28 14:52 被阅读0次

    由于$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

          本文链接:https://www.haomeiwen.com/subject/ewwhuqtx.html