0

URL からパラメーターを取得する必要がある動的なパンくずリストがあります。これを実現するために、次のコードを実行しています。

const userId = this.activatedRoute.params
               .pipe(skipWhile((params: Params) => Number.isNaN(+params['userId'])));

const getAppUserId = userId.pipe(
            switchMap((params: Params) => {
                return +params['userId']
                    ? this.myAppService.getApplicationUser(+params['userId'])
                    : of('')
            }))

しかし、それは常に空であり、Observable に渡されるパラメーターを取得することはありません。を使用すると問題なく動作しますが、コンセプトqueryParamsには行きたくありません。queryParams私が間違っているところはありますか?

4

3 に答える 3

0

創刊 :

Number.isNaN(+params['userId'])

数値ではなく文字列を返します。

第二号:

const getAppUserId = userId.pipe(
  switchMap((params: Params) => {

オブザーバブルからパラメーターを取得するのではなく、ユーザー ID (実際にはブール値) を取得しています。

「observable から/経由で param id を取得し、その後、switchMap で getAppUserId を使用して、snapshot.params から取得した param id で HTTP 呼び出しを行う」ことを希望する場合

次に、正しいコードは次のようになります

this.activatedRoute.params.pipe(
  map(params => params.id),
  switchMap(userId => this.myAppService.getApplicationUser(userId)
);

ID の有効性をテストしないでください: URL は文字列です。ユーザーを信頼することはできません。リクエストを行うだけで、ID が一致しない場合、API は何も返しません。クライアントではなく、API が ID のすべての制御を行うようにします。

于 2019-10-02T11:18:46.657 に答える