【发布时间】:2016-02-16 22:35:50
【问题描述】:
我想根据用户输入的文本过滤我的表格列。我正在使用以下管道,
import {Pipe, PipeTransform} from 'angular2/core';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/filter';
@Pipe({
name: "search"
})
export class SearchPipe implements PipeTransform {
searchTerms: Map<string, string> = new Map<string, string>();
key: string;
term: string = "*";
transform(input, [colIndex, term, key]) {
console.log("start of search " + term + " key:" + key);
this.key = key;
this.term = term;
if (this.term == '*') {
return input;
} else {
input.filter(
function(data) {
data.forEach(
e=> {
console.log("filtering data " + e[key]+" result is : "+e[key].contains(term));
return e[key].contains(term);
}
)
}
).subscribe(
function(err) {
console.log('Error: %s', err);
},
function() {
console.log('Completed');
}
)
}
}
}
在我的html页面中,
<tr *ngFor="#column of (tableData.columns | search:columnIndex:filterTerm:columnKey | async )" (click)="onRowSelect(column)">
<td *ngFor="#key of column | jsonIterator">{{column[key]}}</td>
</tr>
tableData.columns 是 Observable 类型,我从一个内容为的 json 文件中获取,
[{"Component ID":"1","Component Type":"abc","Label Value":"user ID","Tool Tip Value":"please enter user ID"},
{"Component ID":"2","Component Type":"oit","Label Value":"user name","Tool Tip Value":"please enter user name"}
]
'term' 是输入的文本,将根据 json 中的 'key' 的值进行搜索。 JsonIterator 是我在 json 中获取密钥的另一个管道
当用户输入文本时,我的数据表会被清理。 我错过了什么?
而且我的方法是否正确?由于我是 angular js 2 的新手,因此我不知道实现此类组件时遵循的约定。 我的意思是这是用户过滤可观察对象的正确方法还是我应该使用地图或其他东西?
列数据填充为,
this.tableBean.columns = this.http.get('appLiteral.json')
.map(res => res.json());
【问题讨论】:
-
tableData.columns是异步的(可观察的)吗?请提供有关数据来源的更多信息。 -
如果 term != '*' ,您不会返回过滤后的列
标签: typescript angular observable