網站搜尋

javascript - Angular queryParams 訂閱沒有觸發(全選勾選框)


所以我有一個應用程式,你可以在其中選擇想要顯示資料的多個區域。在這些區域的核取方塊上方,我添加了一個主要的核取方塊「AllRegions」,它當然可以選取/取消選取所有其他核取方塊。這運作正常,參數會被發佈到 URL 上等等。

我唯一的問題是,當我勾選/取消勾選「AllRegions」核取方塊時,我的元件無法對參數變更的訂閱做出反應。在取消勾選單一地區時它是可行的,但對這個「AllRegions」卻不行,即使我呼叫的是相同的函數。

元件:

        ngOnInit() {
            this.route.queryParams.subscribe(params => {
            this.loadRegionData();
            })
        }

當我點擊勾選框時,會呼叫這段程式碼。

this.router.navigateByUrl(this.router.createUrlTree([url], { queryParams: { regions: regionParameters } }));

為什麼當我使用 navigateByUrl 時,ngOnInit 中的訂閱沒有被觸發?

答案#1

如果 getSelectedRegions 返回一個 Observable,它將不會被觸發,因為你沒有訂閱它(內部 observable)。我建議你重構成以下方式(假設 route 的類型是 ActivatedRoute):

ngOnInit() {
        this.route.queryParams
        .switchMap(params => this.regionsService.getSelectedRegions())
        .subscribe(
         //handle *data* and *error*
        );
    }