我有一个使用mat-table
的表格。在其中一列中,我想使用来自DatSource当前元素的函数结果,但是出现以下错误:
错误TypeError:“ _ v.parent.context。$ implicit.getPeriodString不是 功能
我的表如下:
<table mat-table [dataSource]="billingLines" class="mat-elevation-z8">
<!-- Other columns comes here -->
<ng-container matColumnDef="period">
<th mat-header-cell *matHeaderCellDef> Période </th>
<td mat-cell *matCellDef="let element; let i=index;">
<p>{{element.getPeriodString()}}</p>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
该组件具有数据源:
@Input() billingLines: ContractBillingLine[] = [];
一个ContractBillingLine
是:
export class ContractBillingLine {
constructor(
public ligneTitle: string,
public creditNote: boolean,
public startPeriod: Date,
public endPeriod: Date,
public sumHT: number,
public sumTVA: number,) {
}
public getPeriodString(): string {
return "Du " + moment(this.startPeriod).format("dd/mm/yyyy") + moment(this.endPeriod).format("dd/mm/yyyy");
}
}
我是Angular的新手,不知道应该怎么做才能直接使用该功能?
我知道我可以使用将使用方法的结果初始化的变量,但是我的startPeriod
和endPeriod
会随着时间的推移而变化,因此我不想手动调用{{1 }}每次两个变量之一发生变化。
感谢您阅读。
答案 0 :(得分:1)
如果要访问在ContractBillingLine
中声明的函数,则必须将dataSource
中的每个对象初始化为ContractBillingLine
的实例。仅仅给billingLines
一种类型ContractBillingLine[]
是行不通的,因为您只是告诉打字稿billingLines
将是ContractBillingLine[]
类型,而没有实际的实例化发生。
export class ContractBillingLine {
public ligneTitle: string,
public creditNote: boolean,
public startPeriod: Date,
public endPeriod: Date,
public sumHT: number,
public sumTVA: number
constructor(
ligneTitle: string,
creditNote: boolean,
startPeriod: Date,
endPeriod: Date,
sumHT: number,
sumTVA: number,
) {
this.ligneTitle = ligneTitle,
this.creditNote = creditNote,
this.startPeriod = startPeriod,
this.endPeriod = endPeriod,
this.sumHT = sumHT,
this.sumTVA = sumTVA
}
public getPeriodString(): string {
return "Du " + moment(this.startPeriod).format("dd/mm/yyyy") + moment(this.endPeriod).format("dd/mm/yyyy");
}
}
适用于此的示例dataSource
const data: ContractBillingLine[] = [
new ContractBillingLine('Title', true, new Date(), new Date(), 0, 0)
];
dataSource = data;
初始化起来可能很繁琐,只需要在组件中声明该函数并将element
传递给它就容易得多。
<p>{{getPeriodString(element)}}</p>
然后在您的组件中
public getPeriodString(element: ContractBillingLine): string {
return "Du " + moment(element.startPeriod).format("dd/mm/yyyy") + moment(element.endPeriod).format("dd/mm/yyyy");
}