Angular 角度网格排序:将默认的升序方法更改为忽略0
考虑一个有角度的垫子桌子,上面有物品和物品的价格,就像这样(水果和价格是标题): 这两个标题都是mat sort header,但当单击“Price”按价格对项目进行排序时,我希望它们按升序列出,忽略0并将所有0值放在列表的末尾,如:Angular 角度网格排序:将默认的升序方法更改为忽略0,angular,sorting,Angular,Sorting,考虑一个有角度的垫子桌子,上面有物品和物品的价格,就像这样(水果和价格是标题): 这两个标题都是mat sort header,但当单击“Price”按价格对项目进行排序时,我希望它们按升序列出,忽略0并将所有0值放在列表的末尾,如: Fruit Price Apple 1 Pear 2 Banana 0 理想情况下,当按降序排序时,0值仍将放在最末尾,如下所示 Fruit Price Pear 2 Apple 1 Ban
Fruit Price
Apple 1
Pear 2
Banana 0
理想情况下,当按降序排序时,0值仍将放在最末尾,如下所示
Fruit Price
Pear 2
Apple 1
Banana 0
目前,Angular仅提供升序[0,1,2]。如何使用自己的方法覆盖默认的升序
谢谢您的时间。您可以使用
matSortChange
事件更改数据源
Stackblitz示例:
HTML
<table matSort (matSortChange)="sortData($event)">
<tr>
<th mat-sort-header="name">Name</th>
<th mat-sort-header="price">Price</th>
</tr>
<tr *ngFor="let fruit of sortedData">
<td>{{fruit.name}}</td>
<td>{{fruit.price}}</td>
</tr>
</table>
您可以使用
matSortChange
事件更改数据源
Stackblitz示例:
HTML
<table matSort (matSortChange)="sortData($event)">
<tr>
<th mat-sort-header="name">Name</th>
<th mat-sort-header="price">Price</th>
</tr>
<tr *ngFor="let fruit of sortedData">
<td>{{fruit.name}}</td>
<td>{{fruit.price}}</td>
</tr>
</table>
谢谢你的帮助。我应该提到,我也使用数据源,而不是设置行,所以我不能使用
让sortedData的结果
,有没有办法在数据排序后更新数据源,可能是这样的<代码>this.dataSource.data=this.sortedData代码>这不适用于多个水果:@Stavm感谢Stavm的帮助。我应该提到,我也使用数据源,而不是设置行,所以我不能使用让sortedData的结果
,有没有办法在数据排序后更新数据源,可能是这样的<代码>this.dataSource.data=this.sortedData代码>这不适用于多个水果:@Stavm
fruits = [
{name: 'Banana', price: 0 },
{name: 'Apple', price: 0 },
{name: 'Orange', price: 2 },
{name: 'Tomato', price: 1 },
];
sortedData: any[];
constructor() {
this.sortedData = this.fruits.slice();
}
sortData(sort: Sort) {
const data = this.fruits.slice();
if (!sort.active || sort.direction === '') {
this.sortedData = data;
return;
}
this.sortedData = data.sort((a, b) => {
const isAsc = sort.direction === 'asc';
if (b.price === 0) return -1;
return compare(a.price, b.price, isAsc);
});
}