Angular Ivy在手动更改检测方面特别允许我们做什么?

问题描述 投票:0回答:1

[This article提及

Ivy为将来打开了一些可能性。现在应该可以在没有zone.js的情况下运行应用程序,并以半手动方式处理更改检测(有点像使用React一样)。这些API已经存在,但仍处于实验阶段,没有记录在案,并且可能会在不久的将来进行更改。

我认为,在Ivy之前,可以在没有zone.js的情况下运行应用程序。常春藤是否允许半手动处理变更检测?这些实验性API在哪里?有文件吗?常春藤仍然使用zone.js吗?

我的目标是通过手动触发更改检测,将更改检测降至最低。这样做的最佳选择是什么。特别是使用常春藤时最好的选择是什么。

angular angular2-changedetection zone angular-ivy
1个回答
0
投票

这是一个很重要的话题,在这里,我会尽力回答。

这个想法实际上是在不将组件声明在任何模块中的情况下呈现组件的。

我们为什么要做这样的事情?这很简单-模块不仅仅是组件。模块具有区域,提供程序,注入器,DI等。我们中许多人的模块代表应用程序。有时我们只想创建一个简单的组件并将其呈现在另一个组件中。

它将引起什么问题?模块是为我们设置区域的模块。区域是自动触发更改检测的区域。如果我们要在模块外部渲染组件,则不会具有自动更改检测功能。

因此,使用常春藤,我们有一些新的API可以帮助我们:

ɵrenderComponent()-可以渲染组件而无需在模块中声明它。

[ɵdetectChanges();-要手动触发变更检测,但是,它只是@angular/core中的一个功能,您不再需要DI来注入ChangeDetectorRef

ɵmarkDirty()-标记要在下一个更改检测周期中检查的组件。

ɵɵdirectiveInject()-在不使用构造函数的情况下,通过函数注入InjectionToken。

如果问所有这些新API前缀的ɵ符号是什么,则意味着这些功能仍处于试验阶段,您不应该将其用于生产。这也是为什么它们没有记录的原因。

关于您的问题-如果您想最大程度地减少组件中CD的使用,只需使用renderComponent功能渲染它们,然后自己处理CD。

[如果您想了解更多信息,我就此主题撰写了完整的博客文章,其中包括许多代码示例。您可以在这里找到它-“ The future of standalone components in post Ivy release days

[我也在NG-DE 2019中进行了演讲-“ Bye Bye NgModules

© www.soinside.com 2019 - 2024. All rights reserved.