$scope.$apply将不再是角2的一部分。那么,如果任何绑定属性在常规角执行上下文之外被更改,那么我们如何让角知道更新DOM呢?
取自Minko Gechev的博客文章
不再是$scope.$apply 但是,AngularJS是如何知道它的执行上下文之外的任何东西都占据了一席之地呢?让我们考虑一下这些更改可能是从哪里来的:
答案是:

我理解,修补内置的javascript函数以通知对角的任何更改是可以以相对安全的方式完成的(而不引入微妙的bug),这对开发人员来说非常方便。但是第三方API (如jQuery.fadeIn)又如何呢?或者,如果浏览器公开了一些新的异步API,而这些API没有涉及到呢?旧$scope.$apply的替代品是什么?
发布于 2015-06-09 15:15:49
所以做所有这些猴子补丁的库是zone.js。
jQuery.fadeIn调用setInterval,setInterval是猴子补丁,只要您在zone.run中调用jQuery.fadeIn。
zone.fork和zone.run在某种程度上取代了$scope.$apply,但这是不同的,因为它会在异步事情完成时自行检测,而当您知道事情已经完成时,您必须手动调用$scope.$apply。还请参见此question+answer:使用zone.js从任何地方检测当前的执行上下文?
如果浏览器公开了一些未涵盖的新异步API?
我想他们也会修补的。
如果其他一切都失败了,,您仍然可以手动调用zone.afterTask()。
我猜这就是你想要的:)
发布于 2016-09-21 17:18:56
NgZoneprivate zone: NgZonethis.zone.run(() => {});,您通常会在那里使用scope.$apply或
ChangeDetectorRefprivate chRef: ChangeDetectorRefchRef.detectChanges();https://stackoverflow.com/questions/30734646
复制相似问题