这是一个很大的话题,但我会尽力回答。
这个想法实际上是渲染组件而不在任何模块内声明它们。
我们为什么要做这样的事情?很简单 - 模块不仅仅是组件。模块有区域、提供者、注入器、DI 等等。对于我们很多人来说,模块代表着应用程序。有时我们只想创建一个简单的组件并在另一个组件中渲染它。
它会带来什么问题呢?模块是为我们设置区域的模块。区域是自动触发变化检测的区域。如果我们在模块外部渲染组件,我们将无法进行自动更改检测。
因此,通过 Ivy,我们有一些新的 API 可以帮助我们:
ɵrenderComponent()
- 可以渲染组件而无需在模块中声明它。
ɵdetectChanges();
- 手动触发更改检测,但是,这只是一个函数@angular/core
并且您不再需要 DI 来注入ChangeDetectorRef
ɵmarkDirty()
- 标记要在下一个更改检测周期中检查的组件。
ɵɵdirectiveInject()
- 在函数中注入 InjectionToken,而不使用构造函数。
如果你问这是什么ɵ
为所有这些新 API 加上前缀,这意味着这些函数仍处于实验阶段,您不应该将它们用于生产。这也是为什么它们没有记录在案的原因。
对于你的问题 - 如果你想最大限度地减少组件中 CD 的使用,只需使用renderComponent
功能,并自行处理CD。
如果您想了解更多信息,我写了一篇关于该主题的完整博客文章,其中包括大量代码示例。你可以在这里找到它 - ”Ivy 发布后独立组件的未来 https://blog.angularindepth.com/the-future-of-standalone-components-in-the-post-ivy-release-days-e7ed9b9b4dcd"
我也在 NG-DE 2019 上做了一个演讲——”再见 NgModule https://www.youtube.com/watch?v=MwFl2Rd_RJ0"