首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角8 @ViewChild翻译

角8 @ViewChild翻译
EN

Stack Overflow用户
提问于 2019-07-07 22:00:28
回答 1查看 715关注 0票数 2

我有一些在角7上工作的代码,但不是角8。

基本上是这样的:

代码语言:javascript
复制
@ViewChild(ChildComponent) child;

如何使这段代码在角8上工作,因为我知道它已经被更改了。

我要对上面的代码做些什么?

以下是完整的代码:

代码语言:javascript
复制
import { Component, ViewChild, AfterViewInit } from '@angular/core';
import { ChildComponent } from "../child/child.component";

@Component({
  selector: 'app-parent',
  template: `
    Message: {{ message }}
    <app-child></app-child>
  `,
  styleUrls: ['./parent.component.css']
})
export class ParentComponent implements AfterViewInit {

  @ViewChild(ChildComponent) child;

  constructor() { }

  message:string;

  ngAfterViewInit() {
    this.message = this.child.message
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-07 22:06:45

这里引用以下的话

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

在常春藤中,我们使时间一致,以便ViewChild和ViewChildren查询在默认情况下在视图之后解析,而不是依赖于模板中结果的位置。虽然这意味着在默认情况下您不会在ngOnInit中找到视图查询结果,但它更容易一些。如果需要该钩子中的查询结果,则可以显式选择将查询标记为“静态”。

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

代码语言:javascript
复制
@ViewChild('test', {static: true}) test: ElementRef;

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56926427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档