2017-08-23 9 views
0

フィルターが追加/削除されるたびに検索APIを呼び出す必要があります。最初にコンポーネントがロードされてから正常に動作し、要求をバックアップされたコントローラに送信します。しかし、次にフィルターを適用して同じAPIにリクエストを送信すると、http.get()関数が呼び出されていますが、要求をバッキングコントローラーに送信していません。私はネットワークタブでチェックしましたが、リクエストはありません。以下は、API呼び出しを送信するために正しく実行されているコードです。あなたはsearchから返されるObservableに加入する必要が角2 get get()関数は、最初の呼び出しの後にバックエンドAPIにリクエストを送信しません。

constructor(private http: Http, private filterService: FilterService, private dataService: DataService) { 

    this.subscription = this.filterService.getFilterListObservable() 
     .subscribe((data) => { 
      let filterKeysObj = this.createFilterKeyObject(data.activeFilters); 
      return this.search(filterKeysObj); 
     }); 
} 

private createFilterKeyObject(activeFilters) { 
    let filterKeysObj = {}; 

    activeFilters.forEach((element) => { 
     if (!filterKeysObj[element.type]) { 
      filterKeysObj[element.type] = []; 
     } 
     filterKeysObj[element.type].push(element.item.id || element.item.label); 
    }); 

    return filterKeysObj; 
} 

public search(filterKeysObj: Object) { 

    let params: URLSearchParams = new URLSearchParams(); 
    if (filterKeysObj) { 
     for (let key in filterKeysObj) { 
      params.set(key, encodeURIComponent(filterKeysObj[key].join())); 
     } 
    } 

    /* 
    // This code is to fetch the static data from a data service. 
    let questionList = this.dataService.questions; 
    return Observable.of(questionList); 
    */ 

    // Http request- 
    return this.http.get(`/api/tasks/search`, { search: params }) 
     .map((res: Response) => { 
      return res.json(); 
     }); 
} 

}

+0

私の答えがここで助けられたなら、あなたはupvoteして受け入れられるとマークできますか? –

答えて

1

寒いが観測されているため、シーケンスを開始するには購読する必要があります。ホットおよびコールド観測の詳細については、hereを参照してください。

関連する問題