我正在尝试在我的应用程序列表上进行自动完成搜索。 搜索工作得很好,但是在加载页面时我无法显示列表的所有值。
例如,当我到达我的搜索页面时,我希望显示列表中的内容,当我正在进行搜索时,我希望过滤值。 过滤器工作正常,但“默认显示”似乎不起作用。
以下是代码:
itemList: Observable<Item[]>; //List displayed on the view
term = new FormControl();
ngOnInit() {
//A search is done when the user type something in the search bar
//then load on the list
this.itemList = this.term.valueChanges
.debounceTime(400)
.distinctUntilChanged()
.switchMap(term => this.searchItem(term));
}
/**
* Search of an item by a value.
* If there is no value to search, load all item
*/
searchItem(valueToSearch:string){
var result;
var userItemId;
if(Meteor.user() !== undefined) {
userItemId = Meteor.user().profile.ItemIds;
}
if(valueToSearch == ''){
result = Items.find({'_id': {$nin: userItemId}});
}
else {
var regexSearch = new RegExp(valueToSearch.toLowerCase(), "i");
result = Items.find({'title': regexSearch, '_id': {$nin: userItemId}});
}
return result;
}
基本上,我无法在加载页面时使该部分工作:
...
if(valueToSearch == ''){
result = Items.find({'_id': {$nin: userItemId}});
}
...
也许这是一个“订阅”问题,我对这个功能并不是很熟悉。
答案 0 :(得分:0)
您可以创建一个Observable并将其返回。如果Meteor返回promise,你可以直接创建Observable.fromPromise() 希望它有所帮助。
searchItem(valueToSearch:string): Observable<Item[]>{
return Observable.create((observer)=>{
let userItemId = Meteor.user()
&& Meteor.user()
&& Meteor.user().profile
&& Meteor.user().profile.ItemIds;
if(!userItemId){
observer.error('');
}
if(valueToSearch == ''){
observer.next(Items.find({'_id': {$nin: userItemId}}));
}else {
var regexSearch = new RegExp(valueToSearch.toLowerCase(), "i");
observer.next(Items.find({'title': regexSearch,'_id': {$nin: userItemId}}));
}
});