什么时候应该使用$scope.$apply()

翻译自:When to use $scope.$apply()

AngularJS对JS原生的异步事件进行了封装:

  • Events => ng-click
  • Timeouts => $timeout
  • jQuery.ajax() => $http

这是一个传统的异步函数,仅仅在最后调用了$scope.$apply() 来通知AngularJS异步事件正在发生。

$scope.$apply()应该在尽可能接近异步事件绑定的地方被调用。

$scope.$apply() should occur as close to the async event binding as possible.

不要随意的在你的代码中使用它,如果你使用了if (!$scope.$$phase) $scope.$apply(),因为你没有处在调用栈的高层。

尽可能使用AngularJS的服务来代替原始的JS。如果你在创建一个AngularJS服务(例如为套接字创建服务),你应该在触发回调的任何位置都使用$scope.$apply()

注:不知道翻译的对不对,附上后两段的原文:

Do NOT randomly sprinkle it throughout your code. If you are doing
if (!$scope.$$phase) $scope.$apply() it’s because you are not high enough in the call stack.

Whenever possible, use AngularJS services instead of native. If you’re creating an AngularJS service (such as for sockets) it should have a $scope.$apply() anywhere it fires a callback.

注:其实我没有太明白作者想要表达的意图,个人觉得下面这篇文章写的更详细且更符合实际:深入理解ANGULAR中的$APPLY()以及$DIGEST()

还可关注微信公众号
AngularJS公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值