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();
});
}
}
私の答えがここで助けられたなら、あなたはupvoteして受け入れられるとマークできますか? –