如何从父组件调用子组件方法

Posted

技术标签:

【中文标题】如何从父组件调用子组件方法【英文标题】:How to call child components method from parent component 【发布时间】:2021-05-02 05:20:42 【问题描述】:

我有一个父子组件,如下所示。 在 child.component.ts 内部, 我有一个方法:childFunction()。 我想在父函数中调用这个方法。 如何做到这一点?

**Parent.html :** 

<div class="box">
    <input type="text" (input)="searchValue=$event.target.value" placeholder=placeHolder />
    
<btn-icon [searchType]='searchType' [searchText]='searchValue'></btn-icon> // child component
</div>

**parent.component.ts :**

export class parentComponent implements OnInit 

parentFunction()
// **Call** childFunction('inputValue');


 
**btn-icon  is Child :**
**btn-icon.component.ts:  (Child)**

export class btn-iconimplements OnInit 
  
  @Input() Type: string;
  @Input() Text: string;

childFunction(inputValue)
      //some logic
    

 

【问题讨论】:

Google for ViewChild angular.io/guide/… 【参考方案1】:

只需使用 ViewChild 获取孩子

export class parentComponent implements OnInit 

@ViewChild(btn-icon) bt-icon //see that viewChild argument is 
                             //the classname of your child-component
  parentFunction()
     this.bt-icon.childFunction('inputValue');
  

您也可以使用模板引用并作为参数传递给函数,例如

    <div class="box">
        <!--see how, in input event you pass the template reference "child" futhermore
                  $event.target.value-->
        <input type="text" (input)="change(child,$event.target.value)"
                 placeholder=placeHolder />
        
      <!--see the "#child", it's a template reference-->
      <btn-icon #child [searchType]='searchType' [searchText]='searchValue'></btn-icon> 
    </div>
change(childComponent:bt-icon,value)
    chilComponent.childFunction(value)

【讨论】:

谢谢!如果我在父组件中导入子组件,则使用 @ViewChild 的此解决方案有效。【参考方案2】:

您可以使用装饰器@ViewChild()注入子组件:

@ViewChild(btn-icon)
private btnIcon: btn-icon;

然后你可以像往常一样访问它的属性:

this.btnIcon.childFunction();

【讨论】:

【参考方案3】:

你应该在父组件中使用@ViewChild:

export class parentComponent implements OnInit 
   @ViewChild(BtnIcon)    btnIcon;
   
   parentFunction()
     btnIcon.childFunction();
   

btnIcon 属性仅在 ngAfterViewInit() 生命周期钩子之后可用并由子组件填充。

注意:我在驼峰式中使用了类名 BtnIcon,而不是像您的示例中的“btn-icon”。

【讨论】:

以上是关于如何从父组件调用子组件方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从父组件调用子组件中的方法?

ReactJS中从父组件调用子函数时如何在子组件中设置状态

从父组件调用时,angular 2 变量在子组件方法中返回 null

从父类调用子组件方法 - Angular

如何从父组件调用路由器出口子组件方法

角 6 |如何从父组件调用子组件中的函数?