Angular 角度v8-@ViewChild静态正确或错误
角度v8刚刚发布。虽然它主要是向后兼容的,但也有一些突破性的变化 根据Angular的一个核心变化是(我引用):Angular 角度v8-@ViewChild静态正确或错误,angular,angular8,viewchild,Angular,Angular8,Viewchild,角度v8刚刚发布。虽然它主要是向后兼容的,但也有一些突破性的变化 根据Angular的一个核心变化是(我引用): 在Angular版本8中,要求所有@ViewChild和@ContentChild查询都有一个“静态”标志,指定查询是“静态”还是“动态” 它还指出,在大多数情况下,只需设置{static:false}即可 @ViewChild('selectorName', { static: false }) varName: any; 我的问题是何时应该将此属性(静态)设置为true?它将如
在Angular版本8中,要求所有@ViewChild和@ContentChild查询都有一个“静态”标志,指定查询是“静态”还是“动态” 它还指出,在大多数情况下,只需设置
{static:false}
即可
@ViewChild('selectorName', { static: false }) varName: any;
我的问题是何时应该将此属性(静态)设置为
true
?它将如何影响我的申请???来自文档:
如何选择要使用的静态标志值:true或false
在
官方API文档,我们一直建议检索查询结果
在ngAfterViewInit中用于查看查询,在ngAfterContentInit中用于内容查询
查询。这是因为当这些生命周期钩子运行时,更改
相关节点的检测已经完成,我们可以保证
我们已经收集了所有可能的查询结果
大多数应用程序都希望使用{static:false}来处理相同的问题
原因。此设置将确保查询匹配依赖于
约束分辨率(例如*NGIF或*ngFors内的结果)将
由查询找到
很少有需要{static:true}标志的情况
(见这里的答案)
当您想要访问
ngOnInit
中的ViewChild
时,请使用{static:true}
使用{static:false}
只能在ngAfterViewInit
中访问。当模板中有结构指令(*ngIf
等)时,这也是您要执行的操作
在大多数情况下,{static:false}
将起作用
从'@angular/core'导入{Component,OnInit,AfterViewInit,ViewChild,ElementRef};
@组成部分({
选择器:“示例”,
templateUrl:'./example.component.html',
样式URL:['./example.component.scss']
})
导出类ExampleComponent实现OnInit,AfterViewInit
{
@ViewChild('elementA',{static:true})elementStatic:ElementRef;
@ViewChild('elementB',{static:false})elementDynamic:ElementRef;
public ngOnInit():void
{
this.elementStatic.nativeElement;//确定
this.elementDynamic.nativeElement;//错误类型错误:无法读取未定义的属性“nativeElement”
}
public ngAfterViewInit():void
{
this.elementStatic.nativeElement;//确定
this.elementDynamic.nativeElement;//确定
}
}
A
B
谢谢,但请你写一个答案,并解释一下。我想纠正的是,对于@ContentChild
的情况,在ngAfterContentInit
中可以找到非静态的@ViewChild比新的@ViewChild有什么缺点?我觉得上一篇比今天的更新更有用