0

angular アプリに問題があります。URLからいくつかのパラメータを読み取るサービスを呼び出す必要があります。パラメータを持つサブスクリプションが完了する前にサービスが起動されるため、機能していません。私のサービスファイルには次のものがあります:

constructor(private http: HttpClient, private route: ActivatedRoute) { 
    this.route.queryParams.subscribe(params => {
      this.param1 = params['param1'];
      this.param2 = params['param2'];
    });
  }

そしてサービス:

getConfigs() {
    let configPath = baseUrl + this.param1 + "/" + this.param2;
    return this.http.get<any>(configPath);
  }

そのため、私AppComponentはサービスを呼び出しgetConfigs()ますが、2 つのパラメーターが定義されていないため、機能していません。どうすれば修正できますか?それが私がサービスを呼び出す方法ですAppComponent

this.service.getConfigs().subscribe((configData) => {
      this.configParams = configData;
    });
4

3 に答える 3

1

ルーターからクエリ パラメータを取得し、first()演算子を使用して最初のイベントのみをswitchMap()取得してから、params オプションを使用してデータを取得します。

  constructor(
    private _http: HttpClient,
    private _route: ActivatedRoute,
  ) { }

  getConfigs() {
    return this._route.queryParams.pipe(
      // rxjs operator skip empty object
      filter(params => !!Object.keys(params).length),
      // rxjs operator use only first event
      first(),
      // rxjs operator switch to another observable
      switchMap(params => this._http.get('host', { params })),
    );
  }
于 2020-09-17T15:56:22.420 に答える