首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >angularjs:$apply(fn)优于$apply()

angularjs:$apply(fn)优于$apply()
EN

Stack Overflow用户
提问于 2015-12-18 14:58:04
回答 1查看 757关注 0票数 1

我正在读http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/

指令链接函数:

代码语言:javascript
运行
复制
element.bind('click', function() {
  scope.foo++;
  scope.bar++;

  scope.$apply();
});

使用$apply的更好方法:

代码语言:javascript
运行
复制
element.bind('click', function() {
  scope.$apply(function(){
    scope.foo++;
    scope.bar++;
  });
});

有什么关系呢?不同的是,在第一个版本中,我们在angular上下文之外更新值,因此如果抛出错误,Angular将永远不会知道。显然,在这个小小的玩具示例中,它不会有太大的不同,但想象一下,我们有一个向用户显示错误的警告框,我们有一个执行网络调用的第三方库,但它失败了。如果我们不把它包装在$apply中,Angular将永远不会知道失败,警告框也不会出现在那里。

困惑:为什么angular需要知道错误,我只需要向用户展示它。例如,在指令的链接fn中有一个ajax请求,我只需要告诉如果失败会发生什么。

EN

回答 1

Stack Overflow用户

发布于 2015-12-18 15:14:28

TAngular $scope有一个名为$apply()的函数,它接受一个函数作为参数。AngularJS表示,只有在$apply()中进行模型突变时,它才会知道模型突变。因此,您只需要将更改模型的代码放在一个函数中,并调用$scope.apply(),将该函数作为参数传递。在$apply()函数调用结束后,AngularJS知道可能已经发生了一些模型更改。然后,它通过调用另一个函数$rootScope.$digest()启动一个摘要周期,该函数传播到所有子作用域。在摘要周期中,会调用观察者来检查模型值是否已更改。如果值已更改,则会调用相应的侦听器函数。现在,它取决于监听器如何处理模型更改。

通过Angular buildin $http模型突变代码的Ajax调用被隐式地包装在$apply()调用中,因此您不需要任何额外的步骤。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34350047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档