【发布时间】:2020-09-21 14:16:17
【问题描述】:
我想使用 EventEmitter 打开一个新选项卡,并在理想情况下使用单击的引用填充过滤器。
所以我的项目设置如下:
我有一个发票组件,它基本上是一个显示发票的表格。它是一个扩展表,因此当单击一行时,它会打开一个包含装运信息的详细表。在 .html 文件中,我在货件的引用上添加了点击事件:
<!-- Reference Column -->
<ng-container matColumnDef="reference">
<th mat-header-cell *matHeaderCellDef> Shipment </th>
<td mat-cell *matCellDef="let expandedElement" (click)="applyShipmentFilter()"> {{expandedElement.reference}} </td>
</ng-container>
此点击事件调用 invoice.ts 文件中的以下函数:
applyShipmentFilter(){
console.log("INVOICE COMPONENT: Shipment is clicked w/ reference ");
this.click.emit();
}
到目前为止一切顺利,控制台记录 INVOICE COMPONENT: Shipment is clicked w/reference 。
单击引用时,我想确保在 app.component.ts 文件中调用了以下函数:
public goToOtherTab(){
console.log("IN APP COMPONENT: tab changed");
const tabCount = 4;
this.selectedIndex = (2) % tabCount;
}
所以我在发票组件中添加了一个 eventEmitter:
@Output() click = new EventEmitter();
并在app html文件中添加了一个click函数,我希望它会调用goToOtherTab函数,但它没有:
<mat-tab label="Shipment costs">
<app-buyers-console-table (click)="goToOtherTab()"></app-buyers-console-table>
</mat-tab>
有人可以向我解释为什么这不起作用吗?
【问题讨论】:
-
可能 eventEmitter (click) 的名称与 dom 事件 'click' 冲突...您可以尝试为 eventEmitter 指定另一个名称(例如,'clickInvoice')...?
-
在你的事件发射器前面加上'on'来防止名字冲突。
-
我已更改名称,请参阅我在问题中的编辑。但是还是不行。
-
原来是另一个问题。在答案中查看我的解决方案!无论如何感谢您的提示!
标签: angular