我有一些代码适用于7号角,但不适用于8号角。
基本上是这样:
{
loader: 'sass-loader',
options: {
importer: materialImporter
},
}
当我知道它已被更改时,如何使此代码在Angular 8上工作。
我对上面的代码有什么处理?
这是完整的代码:
@ViewChild(ChildComponent) child;
答案 0 :(得分:3)
您的示例不起作用的原因是,您试图在视图完成初始化之前访问ViewChild查询的结果。这就是为什么您的代码应放在ngAfterViewInit钩子(在视图inits之后)而不是ngOnInit钩子(在视图inits之前)的原因。
在Ivy中,我们使时间保持一致,以便默认情况下,ViewChild和ViewChildren查询都在视图初始化之后进行解析,而不是取决于结果在模板中的位置。尽管这意味着您默认情况下不会在ngOnInit中找到视图查询结果,但这样做的理由要容易一些。 如果您需要该挂钩中的查询结果,则可以显式选择将查询标记为“静态”
因此对于您的用例,您可以将查询标记为静态(如V8原理图那样):
@ViewChild('test', {static: true}) test: ElementRef;
...或将逻辑移至ngAfterViewInit(首选)。