2017-06-10 33 views
0

私のアプリケーションのリストで自動補完検索をしようとしています。 検索はかなりうまくいきますが、ページが読み込まれたときにリストの値をすべて表示することはできません。自動補完検索のデフォルト値

例えば、私が検索ページに到着したとき、私のリストの内容を表示したい、そして私が検索をしているときに値をフィルターにしたい。 フィルタは完全に機能しますが、「デフォルト表示」は機能していないようです。

ここではコードです:

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

searchItemは()ページをロードしたとき、それは変わるだろうか、観察可能 – Skeptor

+0

は、あなたの答えをありがとうしかし、私はそれを得ることはありません返す必要がありますか?私が研究をしているとき、うまくいきます。あなたはもう少し説明してください:) –

+0

switchmap関数はparamをとり、ストリームを返します。私が同じ仕事をしているなら、どうすればよいか答えを書くつもりです。 – Skeptor

答えて

0

Observableを作成して返すことができます。 Meteorが約束を返す場合は、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}})); 
    } 

}); 
関連する問題