【发布时间】:2019-12-21 19:13:41
【问题描述】:
我遇到的问题是当页面加载并进行 API 调用时,ngfor 循环不会显示所有值,但是当我在搜索框中键入内容以过滤它时,它工作正常,我想要什么它要做的是在页面最初加载时未应用搜索过滤器时返回所有值。
/*Filter Pipe*/
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filter',
})
export class FilterPipe implements PipeTransform {
transform(value: string, filterString: string, propName: string): any {
if (value === null && value.length < 1 || filterString === '') {
return value;
/*This value isn't returning when fiter isn't applied on load*/
}
const resultArray = [];
for (const item of value) {
filterString = filterString.toLowerCase();
if (item[propName].toLowerCase().indexOf(filterString) >= 0) {
resultArray.push(item);
}
}
return resultArray;
}
}
/*Conponent*/
ngOnInit() {
this.api.getStopData().subscribe(
data => {
this.stations = data;
}
);
}
<div class="container">
<form class="form-inline md-form form-sm active-pink-2 mt-2">
<input class="form-control form-control-sm mr-3 w-75" name="search" [(ngModel)]="search" type="text"
placeholder="Search train stations" aria-label="Search">
<i class="fas fa-search" aria-hidden="true"></i>
</form>
<!-- Card -->
<div *ngFor="let station of stations?.results?.objStation | filter:search:'StationDesc'">
<mdb-card class="m-1">
<!--Card content-->
<mdb-card-body>
<!--Title-->
<mdb-card-title>
<h4>{{station.StationDesc}} Train Station</h4>
<hr/>
</mdb-card-title>
<img class="col-6 panel-realtime" src="assets/img/icon_view.png" (click)="getStation(station.StationCode); basicModal.show()"
mdbWavesEffect/>
<img class="col-6 panel-remove" src="assets/img/thumbnail_icon_map.png" (click)="getMaps(station.StationDesc); mapsModal.show()" mdbWavesEffect/>
</mdb-card-body>
</mdb-card>
</div>
</div>
【问题讨论】:
-
Angular 建议不要使用管道进行过滤 (angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe)。对于这种行为,我建议使用 Observables。使用响应式表单,您可以订阅输入的
valueChangesObservable,并使用它来过滤传入的数据。 -
你的组件是否使用 OnPush 策略?
-
它所做的只是对我的服务器进行 api 调用
标签: angular typescript