Angular v8-@ViewChild静态true或false

Gil*_*ain 3 viewchild angular angular8

Angular v8刚刚发布。尽管它大部分是向后兼容的,但还是有一些重大变化。

根据Angular的Changelog,一项核心更改是(我引用):

“在Angular版本8中,要求所有@ViewChild和@ContentChild查询都具有'static'标志,以指定查询是'static'还是'dynamic'。”

还指出,在大多数情况下,只需设置即可解决问题{ static: false }

@ViewChild('selectorName', { static: false }) varName: any;
Run Code Online (Sandbox Code Playgroud)

我的问题是,何时应将此属性(静态)设置为true?以及如何影响我的申请???

Gil*_*ain 6

使用{ static: true }时,您要访问的ViewChildngOnInit

使用{ static: false }将仅访问ngAfterViewInit。当*ngIf模板上有结构指令(等)时,这也是您要追求的目标。

在大多数情况下{ static: false }都可以。


Son*_*oor 5

从文档中:

如何选择要使用的静态标志值:true 或 false?

在官方 API 文档中,我们始终建议在 ngAfterViewInit 中检索查询结果以进行视图查询,并在 ngAfterContentInit 中检索内容查询。这是因为当这些生命周期钩子运行时,相关节点的更改检测已经完成,我们可以保证我们已经收集了所有可能的查询结果。

出于同样的原因,大多数应用程序都希望使用 {static: false}。此设置将确保查询能够找到依赖于绑定解析的查询匹配(例如 *ngIfs 或 *ngFors 内的结果)。

在极少数情况下,可能需要 {static: true} 标志(请参阅此处的答案)。

https://angular.io/guide/static-query-migration

  • 谢谢你,但是你能写一个答案,并附上**解释**吗?不仅仅是复制粘贴文档的一部分。 (3认同)