首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2-替代$scope.$apply?

角2-替代$scope.$apply?
EN

Stack Overflow用户
提问于 2015-06-09 14:15:12
回答 2查看 12.6K关注 0票数 22

$scope.$apply将不再是角2的一部分。那么,如果任何绑定属性在常规角执行上下文之外被更改,那么我们如何让角知道更新DOM呢?

取自Minko Gechev的博客文章

不再是$scope.$apply 但是,AngularJS是如何知道它的执行上下文之外的任何东西都占据了一席之地呢?让我们考虑一下这些更改可能是从哪里来的:

  • setTimeout
  • setInterval
  • 提示(是的,还有人仍然在使用…)
  • XMLHttpRequest
  • WebSockets

答案是:

我理解,修补内置的javascript函数以通知对角的任何更改是可以以相对安全的方式完成的(而不引入微妙的bug),这对开发人员来说非常方便。但是第三方API (如jQuery.fadeIn)又如何呢?或者,如果浏览器公开了一些新的异步API,而这些API没有涉及到呢?旧$scope.$apply的替代品是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-09 15:15:49

所以做所有这些猴子补丁的库是zone.js

jQuery.fadeIn调用setIntervalsetInterval是猴子补丁,只要您在zone.run中调用jQuery.fadeIn

zone.forkzone.run在某种程度上取代了$scope.$apply,但这是不同的,因为它会在异步事情完成时自行检测,而当您知道事情已经完成时,您必须手动调用$scope.$apply。还请参见此question+answer:使用zone.js从任何地方检测当前的执行上下文?

如果浏览器公开了一些未涵盖的新异步API?

我想他们也会修补的。

如果其他一切都失败了,,您仍然可以手动调用zone.afterTask()

我猜这就是你想要的:)

票数 15
EN

Stack Overflow用户

发布于 2016-09-21 17:18:56

  1. 从核心导入NgZone
  2. 构造函数中的private zone: NgZone
  3. this.zone.run(() => {});,您通常会在那里使用scope.$apply

  1. ChangeDetectorRef
  2. private chRef: ChangeDetectorRef
  3. chRef.detectChanges();
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30734646

复制
相关文章

相似问题

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