Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自动完成搜索默认值_Javascript_Angular_Meteor - Fatal编程技术网

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}}));
    }

});