Angular v8-@ViewChild静态true或false

时间:2019-07-09 12:05:28

标签: angular angular8 viewchild

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

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

“在Angular版本8中,所有@ViewChild和@ContentChild查询都必须具有“静态”标志,以指定查询是“静态”还是“动态”。”

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

@ViewChild('selectorName', { static: false }) varName: any;

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

3 个答案:

答案 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}标志   (请参见此处的答案)。

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

答案 2 :(得分:0)

何时使用 {static:true}

https://angular.io/guide/static-query-migration#should-i-use-static-true

这用非常简单的术语解释。