从子组件调用父函数

Posted

技术标签:

【中文标题】从子组件调用父函数【英文标题】:Calling parent functions from child component 【发布时间】:2020-03-25 02:20:00 【问题描述】:

我有以下结构。

ParentComponent.ts

reset(offense) 
    return this.http.post(...);
   

ParentComponent.html

<ion-list>
    <swipable-offense-card
        *ngFor="let offense of filteredOffenses"
        [offense]="offense"
        (onReset)="reset(offense)"
        >
    </swipable-offense-card>
</ion-list>    

和孩子: ChildComponent.ts

@Component(
    selector: 'swipable-offense-card',
    templateUrl: 'swipable-offense-card.html',
  )
  export class SwipableOffenseCard 
    @Input() offense: Offense;
    @Output() onReset: EventEmitter<any> = new EventEmitter();

    reset() 
      this.onReset.emit();
    
  

ChildComponent.html

<p> offense.title </p>
<button (click)="reset()"></button>

现在,通过这种结构,我在此处传递的攻击参数(onReset)="reset(offense)" 正在发送到父组件。不过,我更喜欢做这样的事情。

ChildComponent.ts

reset() 
    this.onReset.emit(
       ...this.offense
    );

但是这个没有发送任何参数来重置父组件的方法。我如何在 Angular 中做到这一点?

【问题讨论】:

reset()  this.onReset.emit( ...this.offense ); 
具有这种结构。您的父函数正在触发? (不管参数)
【参考方案1】:

你必须在这样的参数中添加$event

// ParentComponent.html
<ion-list>
  <swipable-offense-card
     *ngFor="let offense of filteredOffenses"
     [offense]="offense"
     (onReset)="reset($event)"
     >
 </swipable-offense-card>
</ion-list>

这是https://stackblitz.com/edit/angular-dkfxb2的例子

【讨论】:

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

如何将父组件函数传递给子组件,然后从子 AngularJS 内部调用它

从子组件调用父函数会在 Vue.js 中引发错误

即使从父组件传递函数后也无法从子组件更改状态

ReactJS 从子组件修改父状态

Vuejs 3 从子组件向父组件发出事件

React - 状态在一个父函数中定义,但不在从子函数调用的另一个父函数中