Angular 8 @ViewChild翻译

时间:2019-07-07 22:00:28

标签: angular angular8

我有一些代码适用于7号角,但不适用于8号角。

基本上是这样:

{
            loader: 'sass-loader',
            options: {
              importer: materialImporter
            },
          }

当我知道它已被更改时,如何使此代码在Angular 8上工作。

我对上面的代码有什么处理?

这是完整的代码:

@ViewChild(ChildComponent) child;

1 个答案:

答案 0 :(得分:3)

我从this source code

引用以下内容

您的示例不起作用的原因是,您试图在视图完成初始化之前访问ViewChild查询的结果。这就是为什么您的代码应放在ngAfterViewInit钩子(在视图inits之后)而不是ngOnInit钩子(在视图inits之前)的原因。

在Ivy中,我们使时间保持一致,以便默认情况下,ViewChild和ViewChildren查询都在视图初始化之后进行解析,而不是取决于结果在模板中的位置。尽管这意味着您默认情况下不会在ngOnInit中找到视图查询结果,但这样做的理由要容易一些。 如果您需要该挂钩中的查询结果,则可以显式选择将查询标记为“静态”

因此对于您的用例,您可以将查询标记为静态(如V8原理图那样):

@ViewChild('test', {static: true}) test: ElementRef;

...或将逻辑移至ngAfterViewInit(首选)。