gpt4 book ai didi

arrays - angular2过滤问题

转载 作者:搜寻专家 更新时间:2023-10-30 21:42:03 26 4
gpt4 key购买 nike

我正在尝试在 angular2 中制作一个过滤器,我制作了一系列这样的产品:

private products = ["Apple", "Banana", "Orange"];

这是我的过滤管:

import {Pipe} from 'angular2/core';

@Pipe({name:'filter'})

export class FilterPipe {
transform(value, args) {
if(!args[0]){
return value;
}
else if (value) {
return value.filter(item => {
for (let key in item){
if((typeof item[key]==='string' || item[key] instanceof String) && (item[key].indexOf(args[0]) !== -1)){
return true;
}
}
});
}
}
}

在我的组件中,我添加了一个 ul 元素来显示产品,并添加了一个 input 元素来过滤它们:

<input type="text" [(ngModel)]="filterText">
<ul>
<li *ngFor="#product of products | filter: filterText">
{{product}}
</li>
</ul>

运行这段代码时的问题是它只在输入第一个字母时起作用(过滤),一旦输入更多字母它就不起作用。有什么帮助吗?

最佳答案

您正在尝试将数组中字符串的每个字符与输入的文本进行比较

'A'   => ('Apple') => 'A'.indexOf('A')   'p'.indexOf('A')   ...
'Ap' => ('Apple') => 'A'.indexOf('Ap') 'p'.indexOf('Ap') ... - always false
'App' => ('Apple') => 'A'.indexOf('App') 'p'.indexOf('App') ... - always false

我会按如下方式更改管道:

@Pipe({name:'filter'})   
export class FilterPipe {
transform(value, args) {
if(!args[0]) return value;
return value.filter(item => item.indexOf(args[0]) > -1);
}
}

https://plnkr.co/edit/TpJ6Zu8QovWINqx04KUY?p=preview

<强>!!!这是 Angular 2 Beta 版本


Angular RC 版本的代码如下所示:

@Pipe({ name: 'filter' })
export class FilterPipe {
transform(value, term) {
if (!term) return value;
return value.filter(item => item.indexOf(term) > -1);
}
}

关于arrays - angular2过滤问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37868866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com