Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在GET请求中使用激活的Route param变量返回null_Javascript_Angular_Parameters_Get_Angular Httpclient - Fatal编程技术网

Javascript 在GET请求中使用激活的Route param变量返回null

Javascript 在GET请求中使用激活的Route param变量返回null,javascript,angular,parameters,get,angular-httpclient,Javascript,Angular,Parameters,Get,Angular Httpclient,我有一个组件正在侦听一个可观察对象,该对象根据字符串中提供的名称返回信息 我想通过在GET请求中传入激活路由参数的变量来为可观察对象提供名称。问题是,当我在服务的GET请求中使用变量时,URL没有检测到我的变量,请求返回“null” 我怀疑我的问题在于我的组件中的ngOnit。我的getPlayer(playerCode)中的playerCode。。我只是不知道为什么 如果我的playerCode是一个字符串,并且我在请求中将其附加到我的URL中,那么这不应该起作用吗 在我的组件中: ngOnI

我有一个组件正在侦听一个可观察对象,该对象根据字符串中提供的名称返回信息

我想通过在GET请求中传入激活路由参数的变量来为可观察对象提供名称。问题是,当我在服务的GET请求中使用变量时,URL没有检测到我的变量,请求返回“null”

我怀疑我的问题在于我的组件中的ngOnit。我的
getPlayer(playerCode)
中的
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', pathMatch: 'full', component: CareerComponent },
 { path: 'players/:player', component: CareerComponent },
 {  path: '**', redirectTo: 'players'  }

这将确保当您的url为
players/0203
时,它将匹配第二条路线,而不是第一条路线。

问题在于您的路线。它将首先匹配第一条路线,因此将忽略您的动态变量。将路由更改为:

const routes: Routes = [

 { path: 'players', pathMatch: 'full', component: CareerComponent },
 { path: 'players/:player', component: CareerComponent },
 {  path: '**', redirectTo: 'players'  }
这将确保当您的url为
players/0203
时,它将匹配第二条路线,而不是第一条路线。


尝试使用

const routeparams = this.route.snapshot.queryParams 
它将返回一个包含所有参数和值的对象,您可以

然后,您可以通过以下方式获得球员为您服务的价值:

routeparams['player']

尝试使用

const routeparams = this.route.snapshot.queryParams 
它将返回一个包含所有参数和值的对象,您可以

然后,您可以通过以下方式获得球员为您服务的价值:

routeparams['player']

感谢您的回复!刚刚尝试了这个,但我仍然看到
https://api.pubg.com/shards/steam/players?filter[playerNames]=null
尽管:(在这里创建了一个stackblitz:Argh,所以我错过了一个非常愚蠢的东西><我在我的应用程序组件中注释了我的东西..你的两个答案都有帮助,但我将C_Ogo's标记为答案,因为我的路线中没有路径匹配。这可能也是我的问题。但谢谢你们:)感谢您的回复!刚刚尝试了这个,但我仍然看到
https://api.pubg.com/shards/steam/players?filter[playerNames]=null
尽管:(在这里创建了一个stackblitz:Argh,所以我错过了一个非常愚蠢的东西><我在我的应用程序组件中注释了我的东西..你的两个答案都有帮助,但我将C_Ogo's标记为答案,因为我的路线中没有路径匹配。这可能也是我的问题。但谢谢你们:)