Javascript 自动完成搜索默认值
我正试图在我申请表上的列表上进行自动完成搜索。 搜索效果很好,但我无法在加载页面时显示列表的所有值 例如,当我到达我的搜索页面时,我希望显示列表的内容,当我进行搜索时,我希望筛选值。 过滤器工作正常,但“默认显示”似乎不起作用 代码如下:Javascript 自动完成搜索默认值,javascript,angular,meteor,Javascript,Angular,Meteor,我正试图在我申请表上的列表上进行自动完成搜索。 搜索效果很好,但我无法在加载页面时显示列表的所有值 例如,当我到达我的搜索页面时,我希望显示列表的内容,当我进行搜索时,我希望筛选值。 过滤器工作正常,但“默认显示”似乎不起作用 代码如下: itemList: Observable<Item[]>; //List displayed on the view term = new FormControl(); ngOnInit() { //A search i
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;
}
也许这是一个“订阅”问题,我对该功能不太熟悉。您可以创建一个可观察对象并返回它。如果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}}));
}
});
searchItem(valueToSearch:string):可观察{
返回可观察的。创建((观察者)=>{
让userItemId=Meteor.user()
&&Meteor.user()
&&Meteor.user()配置文件
&&Meteor.user().profile.ItemIds;
如果(!userItemId){
观察者错误(“”);
}
如果(valueToSearch==''){
next(Items.find({''uid':{$nin:userItemId}));
}否则{
var regexSearch=new RegExp(valueToSearch.toLowerCase(),“i”);
next(Items.find({'title':regexSearch,''uid':{$nin:userItemId}}));
}
});
searchItem()应该返回一个observativeThouk for your for your response,但我不明白,当页面加载时,它会发生什么变化?我的意思是,当我进行研究时,它工作得很好。请您再解释一下:)switchmap函数接受一个参数并返回一个流。如果我执行相同的任务,我会写一个答案。
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}}));
}
});