Angular mat-table 使用数据源元素的功能
Angular mat-table using function of DataSource element
我有一个 table 使用 mat-table
。在其中一列中,我想使用来自 DatSource 的当前元素的函数的结果,但出现以下错误:
ERROR TypeError: "_v.parent.context.$implicit.getPeriodString is not a
function
我的table如下:
<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
会随着时间而改变,我不想手动调用 getPeriodString()
每次两个变量之一改变。
感谢阅读。
如果您想访问 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");
}
我有一个 table 使用 mat-table
。在其中一列中,我想使用来自 DatSource 的当前元素的函数的结果,但出现以下错误:
ERROR TypeError: "_v.parent.context.$implicit.getPeriodString is not a function
我的table如下:
<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
会随着时间而改变,我不想手动调用 getPeriodString()
每次两个变量之一改变。
感谢阅读。
如果您想访问 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");
}