从Angular中的父组件访问子ngIf

Posted

技术标签:

【中文标题】从Angular中的父组件访问子ngIf【英文标题】:Access child ngIf from parent component in Angular 【发布时间】:2019-10-10 23:10:13 【问题描述】:

我有一个父组件和一个子组件。子组件中有一个 ngif 语句。我想在父组件中使用相同的 ngif。 下面是示例代码。

子组件:

`selector: 'child-component',
  template: `
    <div class="container">
      <div class="panel panel-danger">
        <div 
          class="panel-heading" 
          (click)="opened = !opened">
          Click me
        </div>
        <div 
          class="panel-body" 
          *ngIf="opened">body</div>
      </div>
    </div>
  `,
  styleUrls: [ './app.component.css' ]
)
export class ChildComponent  
  opened = false;
  title = 'Hello Panel';
  body = 'this is the content';

`
parent component:
     <h3 *ngIf="loadcondition">This is Prent component</h3>

我尝试使用@Viewchild 实现相同的目的。 在 parent.component.ts--

从'./child-component'导入ChildComponent;

   loadcondition : boolean = true;
    @ViewChild(ChildComponent) private childreference: ChildComponent; 

   ngAfterViewInit() 
       this.loadcondition = this.childreference.opened= false;
       console.log('on after view init', this.childreference);
     

parent.component.html--

<div class="center"><h3 *ngIf="loadcondition">This is Parent component</h3> 
<child-component></child-component>
</div>

但不幸的是,子引用在控制台中返回 undefined。有没有其他方法可以将子条件访问到父组件而不是@Viewchild。

【问题讨论】:

在子组件中使用@Input() opened = false 作为定义 如果父子条件相同,则只需要父子条件。 @Ronald Haan....我试过但仍然得到相同的响应...childreference return undefined @trichetriche...能否请您详细说明一下,因为在这种情况下,条件基于子组件数据 【参考方案1】:

如果使用引用变量,则可以访问children的所有属性。

<div class="center">
  <h3 *ngIf="mychild.opened">This is Parent component</h3> 
  <child-component #mychild></child-component>
</div>

【讨论】:

以上是关于从Angular中的父组件访问子ngIf的主要内容,如果未能解决你的问题,请参考以下文章

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

如何从Angular2中的父组件获取子路由的:id参数

Angular 5. 检查子组件中的父 *ngIf

如何从 TypeScript 文件中的父级获取子组件变量和函数

如何在 Angular 中显示具有自己路由的父组件内的特定子组件?

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