使用 Output() 和 EventEmitter() 在 Angular 应用程序中传递值

Mui*_*rik 4 javascript eventemitter angular

上周,我成功地让 Output() 和 EventEmitter() 在我的 Angular 应用程序中正常工作。但今天我在尝试在另一种情况下实现这一点时遇到了问题。不知道我错过了什么。

首先,在处理应用于记录列表的过滤器的子组件中,我有以下内容:

@Output() sendFilter = new EventEmitter();

optionClicked(option) {
    this.sendFilter.emit(option);
    console.log('Filter from filters comp is: ' + option.toolbarLabel);
    this.option = option;
}
Run Code Online (Sandbox Code Playgroud)

该过滤器组件的视图如下所示:

<md-checkbox *ngFor="let option of categoryFilters.options" 
   [(ngModel)]="option.value" (click)="optionClicked(option)">
   {{option.label}}
</md-checkbox>
Run Code Online (Sandbox Code Playgroud)

所以我使用“sendFilter”来发出“选项”。然后,在我的其他组件中,我假设应该接收/传递该值到该函数中:

optionReceived(option) {
    console.log('Consulting: ' + option.toolbarLabel);
}
Run Code Online (Sandbox Code Playgroud)

在这个组件的视图中我有这个:

<list-display [records]="records" (sendChange)="pageChange($event)" (sendFilter)="optionReceived(option)"></list-display>
Run Code Online (Sandbox Code Playgroud)

但是,只有过滤器组件上的事件才会记录到控制台。我上面的 console.log 永远不会发生。“optionReceived()”函数不应该在过滤器组件发出新信号时自动触发吗?

我什至尝试将“optionClicked(option)”添加到 Angular 的 OnChanges 生命周期挂钩中:

ngOnChanges(option) {
    this.optionReceived(option.toolbarLabel);
}
Run Code Online (Sandbox Code Playgroud)

...但仍然没有任何内容从该组件记录到控制台。

我在这里缺少什么?

Ara*_*ind 5

假设您的复选框位于子组件内,并且您应该按如下方式使用

错误一:

@Output() sendFilter = new EventEmitter<any>();
Run Code Online (Sandbox Code Playgroud)

错误2:

<sub-component (sendFilter)="optionReceived($event)"> </sub-component>
Run Code Online (Sandbox Code Playgroud)

在您的父组件中实现此方法为

optionReceived(option:any){
        console.log('Consulting: ' + option.toolbarLabel);
}
Run Code Online (Sandbox Code Playgroud)