Использование переменной параметра Activated Route в GET-запросе возвращает ноль - PullRequest
0 голосов
/ 20 октября 2019

У меня есть компонент, который прослушивает Observable, который возвращает информацию, основанную на имени, указанном в строке.

Я хотел бы предоставить имя для Observable, передав переменную параметра Activated Route в запросе GET. Проблема заключается в том, что когда я использую переменную в своем GET-запросе в службе, URL-адрес не определяет мою переменную, и запрос возвращает значение «ноль».

Я подозреваю, что моя проблема заключается в моем ngOnit в моем компоненте. playerCode в моем getPlayer(playerCode) .. Я просто не уверен, почему ..

Если мой playerCode - строка, и я добавляю это к своему URL в запросе, разве это не должно работать?

В моем компоненте:

ngOnInit() {

const playerCode = this.route.snapshot.paramMap.get('player');  

this.playerService.getPlayer(playerCode).pipe(
  switchMap( player => { 
   let playerData = player["data"][0];
   let anotherID = playerData.id;

   return this.playerService.getSeasonStats(anotherID);

 })) 

 .subscribe(id => this.player = id);


 }

Мой сервис, использующий строковую переменную в URL:

 getPlayer(player: string):Observable<Player[]> {

let getHeaders = new HttpHeaders({'Authorization':'API_Key', 'Accept': 'application/vnd.api+json'}); 

  return this.http.get<Player[]>(`https://api.pubg.com/shards/steam/players?filter[playerNames]=`+ player,  { observe:'body',   responseType: 'json', headers: getHeaders,  });    

  }

Мой компонент маршрутизации приложений

 const routes: Routes = [

 { path: 'players', component: CareerComponent },
 { path: 'players/:player', component: CareerComponent },
 {  path: '**', redirectTo: 'players'  }

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Попробуйте использовать

const routeparams = this.route.snapshot.queryParams 

, он вернет объект всех параметров и значений, и вы можете

, тогда вы сможете получить значение игрока для вашего обслуживанияс

routeparams['player']
1 голос
/ 20 октября 2019

Проблема с вашей маршрутизацией. Сначала он будет соответствовать первому маршруту, поэтому ваша динамическая переменная будет игнорироваться. Измените ваш маршрут на этот:

const routes: Routes = [

 { path: 'players', pathMatch: 'full', component: CareerComponent },
 { path: 'players/:player', component: CareerComponent },
 {  path: '**', redirectTo: 'players'  }

Это гарантирует, что когда ваш URL будет players/0203, он будет соответствовать второму маршруту, а не первому.

...