无法访问 Angular 父组件中的 @ViewChild 属性

Posted

技术标签:

【中文标题】无法访问 Angular 父组件中的 @ViewChild 属性【英文标题】:Cannot access @ViewChild property in angular parent component 【发布时间】:2020-06-17 23:33:24 【问题描述】:

child.component.ts

currentPage = 1;

parent.component.ts

export class ParentComponent implements OnInit, AfterViewInit 
  @ViewChild(ChildComponent, static: false) child;
  ngAfterViewInit() 
      console.log(this.child.currentPage); // throws error
  

parent.component.ts

<app-child></app-child>

我尝试设置超时,但也没有用。

ERROR TypeError: Cannot read property 'currentPage' of undefined

我做错了什么?

【问题讨论】:

添加子组件的类型:``` @ViewChild(ChildComponent, static: false) child: ChildComponent `` 这也经常发生在我身上。确保孩子不在 ngIf 内并且不在订阅后,如果它是你必须在设置后等待,否则不可用。 @shAkur,如果您的 ChildComponent 不在 Angular 中,因为您有一个 *ngIf="condition" -并且条件一开始是错误的,给您一个错误 - 您可以使用 if @987654325 来解决@,傻逼例子stackblitz.com/edit/… 父组件内部子组件的引用确实是有条件的:。我的孩子参考在 withoutResults ng 模板中:( 【参考方案1】:

试试这样:

.html

<app-child #ChildComponent></app-child>

.ts

@ViewChild("ChildComponent", static: true) child:ChildComponent;

【讨论】:

@angular-devkit/core 8.3.23 @angular-devkit/schematics 8.3.23 @angular/cdk 8.2.3 @angular/cli 8.3.23 @ngtools/webpack 8.3.23 @schematics/角度 8.3.23 如果他想操作DOM,他需要指定#ChildComponent,但是在这种情况下,他不需要这个【参考方案2】:

指定组件名称并在子视图中键入如下

@ViewChild(HelloComponent, static: false) hello: HelloComponent;

查看示例stackblitz

【讨论】:

【参考方案3】:

有效。

parent.component.ts

export class AppComponent implements AfterViewInit 

  @ViewChild('child', static: true)
  child: ChildComponent;

  ngAfterViewInit() 
    console.log(this.child.currentPage); // works
  

parent.component.html

<app-child #child></app-child>

child.component.ts

export class ChildComponent 
    currentPage = 1;

【讨论】:

以上是关于无法访问 Angular 父组件中的 @ViewChild 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Angular 6 中的父组件访问子组件中的表单?

从Angular中的父组件访问子ngIf

数据未从Angular中的父组件传递到子组件

当父组件使用 ng-content Angular 时从子组件访问父组件

如何在Angular 5中从父组件继承子组件中的css样式

Angular 1.5 父子组件问题