Angular v8刚刚发布。尽管它大部分是向后兼容的,但还是有一些重大变化。
根据Angular的Changelog,一项核心更改是(我引用):
还指出,在大多数情况下,只需设置{ static: false }
就可以解决问题。
@ViewChild('selectorName', { static: false }) varName: any;
我的问题是,何时应将此属性(静态)设置为true
?以及如何影响我的申请?
答案 0 :(得分:6)
要访问{ static: true }
中的ViewChild
,请使用ngOnInit
。
使用{ static: false }
仅在ngAfterViewInit
中可用。当模板上有结构指令(*ngIf
等)时,这也是您要追求的目标。
在大多数情况下,{ static: false }
可以使用。
答案 1 :(得分:2)
从文档中:
如何选择要使用的静态标志值:true或false?
在 官方API文档,我们一直建议您检索查询结果 在ngAfterViewInit中进行视图查询,在ngAfterContentInit中进行内容查询 查询。这是因为当这些生命周期挂钩运行时, 相关节点的检测已完成,我们可以保证 我们已经收集了所有可能的查询结果。
大多数应用程序都希望使用{static:false} 原因。此设置将确保查询匹配项取决于 绑定分辨率(例如* ngIfs或* ngFors内部的结果)为 通过查询找到。
在少数情况下,可能需要使用{static:true}标志 (请参见此处的答案)。
答案 2 :(得分:0)
何时使用 {static:true}
https://angular.io/guide/static-query-migration#should-i-use-static-true
这用非常简单的术语解释。