我试图让我的表格列可排序。我在这里找到了这个教程:https://www.youtube.com/watch?v=UzRuerCoZ1E&t=715s
使用该信息,我最终得到了以下内容:
处理排序的管道
这里是帮助我构建表格的组件。在这里,我定义了 sortedColumn 变量。
我遇到了以下错误,但注入以下代码后成功解决:
图片链接:
处理排序的管道
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'sort',
pure: true
})
export class TableSortPipe implements PipeTransform {
transform(list: any[], column:string): any[] {
let sortedArray = list.sort((a,b)=>{
if(a[column] > b[column]){
return 1;
}
if(a[column] < b[column]){
return -1;
}
return 0;
})
return sortedArray;
}
}
这里是帮助我构建表格的组件。在这里,我定义了 sortedColumn 变量。
import { NavbarService } from './../navbar/navbar.service';
import { LiveUpdatesService } from './live-updates.service';
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
@Component({
selector: 'app-live-updates',
templateUrl: './live-updates.component.html',
styleUrls: ['./sass/live-updates.component.scss']
})
export class LiveUpdatesComponent implements OnInit{
stocks$: Observable<any[]>;
sortedColumn: string;
constructor(private updatesService: LiveUpdatesService, public nav: NavbarService) {
this.stocks$ = this.updatesService.getStocks();
}
ngOnInit() {
this.nav.show();
}
}
这是我的模板文件。如您所见,我已将sort
管道附加到循环中,以便输出表格行。值得注意的是,我呈现表格的方式与视频中的不同。例如,他的数据存储在数组中,但我的数据存储在Firebase上。他动态渲染表格,但我的表格固定为一定数量的列。我也硬编码了标题,但他使用变量名从数组生成表头。我不确定这些差异是否会导致问题无法解决。
<section class="score-cards">
<app-score-cards></app-score-cards>
</section>
<section class="live-updates-wrapper">
<div class="table-wrapper">
<table class="stock-updates">
<thead>
<tr>
<th class="ticker-fixed">Ticker</th>
<th><a (click)="sortedColumn = $any($event.target).textContent">Ask Price</a></th>
<th><a (click)="sortedColumn = $any($event.target).textContent">Tax Value</a></th>
<th><a (click)="sortedColumn = $any($event.target).textContent">Est. Value</a></th>
<th><a (click)="sortedColumn = $any($event.target).textContent">Location</a></th>
</tr>
</thead>
<tbody>
<tr *ngFor="let s of stocks$ | async | sort : sortedColumn">
<td class="ticker-fixed">
<a target="_blank" href="https://robinhood.com/stocks/{{ s.TICKER }}">{{ s.TICKER }}</a>
<span class="sp500">{{ s.sp500_flag }}S&P</span>
</td>
<td>{{ s.CLOSE }}</td>
<td>{{ s.tax_diff }}</td>
<td>{{ s.MarketCap }}</td>
<td>{{ s.Sector }}</td>
</tr>
</tbody>
</table>
</div>
</section>
我遇到了以下错误,但注入以下代码后成功解决:
list = !!list ? list : [];
现在没有错误了,但是排序不像预期那样工作。单击表头时,什么都不会发生。我该如何解决?图片链接:
declarations
中声明管道,然后还需要在providers
中提供你的管道。如果你的唯一模块是AppModule,你可以在那里完成这两件事。 - Z. Bagleylist = !!list ? list : [];
问题是你在某个时候传入了undefined
,并且试图将.sort(..)
应用于undefined
。list = !!list ? list : []
将会在任何时候将一个空数组应用于值,如果它是未定义的! - Z. Bagley