【发布时间】:2020-04-07 12:26:42
【问题描述】:
在我的模板中,我绑定了这个snapShotArray。 snapShotArray 变量正在通过 REST 端点调用填充数据。
<div class="col col-md-4 filter-by-cam">
<input type="text" name="search" value="search" [(ngModel)]="search" #searchSnaps="ngModel"
(keyup)="searchSnapshot(search)" />
<button class="btn btn-primary" [disabled]="!search"
(click)="searchSnapshot(searchSnaps.value)">Search
</button>
</div>
<div *ngIf="!noData" class="game-board col-md-12">
<div class="box camera-view-container col-md-3" *ngFor="let item of snapShotArray; let i = index; ">
<img class="box-img camera-view" id="img{{i}}" src="{{item.image}}" crossOrigin="Anonymous">
<div class="cam-feed">
<span> {{item.name}}</span>
<p>Last captured: {{item.lastCapturedDate}}</p>
</div>
</div>
</div>
Component.ts:
public searchSnapshot(name: string) {
let b = a.filter(item => item.name === name);
}
问题:
我想要的是搜索snapShotArray 数组并返回一个与用户输入的文本匹配的特定对象。一旦用户清除文本框,将 snapShotArray 替换为所有先前的对象或先前获取数据?
我知道Filter 不会改变原始数组。但是我现在卡住的地方是在将原始snapShotArray 与模板绑定时进行过滤和替换。基本上是客户端的过滤功能。我如何做到这一点?
【问题讨论】:
-
虽然您看到许多教程和示例显示使用管道进行排序和过滤,但出于性能原因,不建议这样做angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe。通过 RxJS 运算符或数组原型函数在组件中进行过滤不仅非常好,而且是推荐的方法。像飞行英雄管道这样的例子适用于小型数据集,但是随着应用程序的增长,这些过滤管道绝对会降低性能。
-
您好,您能给这个问题点个赞吗?还是好的解决方案?我希望这个问题引起更多关注。主要是因为我正在使用的数据集是
base64图像。未来肯定会出现性能问题。 -
我投了赞成票。话虽如此,请记住,您始终可以保持
snapShotArray不变,并创建一个基于snapShotArray的附加变量filteredSnapShotArray。虽然它与您的问题不完全相同,但这是可能的方法stackoverflow.com/questions/58740256/…。 -
非常感谢,我会看看它。
标签: javascript angular typescript filter find