Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Angular Angulat,Http获取错误(拆分)查询参数_Angular_Query Parameters - Fatal编程技术网

Angular Angulat,Http获取错误(拆分)查询参数

Angular Angulat,Http获取错误(拆分)查询参数,angular,query-parameters,Angular,Query Parameters,我正在尝试使用queryParams,这样我就不会在前端(Angular)和后端(JavaSpringBoot)中创建特定的组件 我正在使一个电子商务网站看起来很像。 在我的主页上我有这个 <a [routerLink]="['/ads']" [queryParams]="{category: 'multimedia'}"> console.logs为我提供了正确的参数,在本例中,该参数是多媒体的,但当使用以下代码发出请求时: getA

我正在尝试使用queryParams,这样我就不会在前端(Angular)和后端(JavaSpringBoot)中创建特定的组件

我正在使一个电子商务网站看起来很像。 在我的主页上我有这个

  <a [routerLink]="['/ads']" [queryParams]="{category: 'multimedia'}">
console.logs为我提供了正确的参数,在本例中,该参数是多媒体的,但当使用以下代码发出请求时:

 getAds(param): Observable<Ad[]> {
return this.http.get<Ad[]>(apiUrl + "ads",{params: param}).pipe(
  tap(),
  catchError(this.handleError("getAds", []))
);
}
后端的requestparam给我一个空结果。 我做错了什么?
PS:我如何对多个参数也这样做?

当我们用一个参数创建一个路由器URL时,我们有一些类似这样的路由器

const routes: Routes =[{ path: 'example/:category', component: examolComponents}];
<a [routerLink]="['/example', 'multimedia']">
category: string;
 constructor(private route: ActivatedRoute) { 
       route.paramMap.subscribe(params => {
         this.category = params['params'].category
       });
   }
之后,我们可以从这样的标记开始设置

const routes: Routes =[{ path: 'example/:category', component: examolComponents}];
<a [routerLink]="['/example', 'multimedia']">
category: string;
 constructor(private route: ActivatedRoute) { 
       route.paramMap.subscribe(params => {
         this.category = params['params'].category
       });
   }

您可以使用snapshot来获取查询图,并在构造函数中初始化类别,我建议这样做

category: string;
constructor(private route: ActivatedRoute) {
  this.category = this.route.snapshot.queryParams['category'];
}    

ngOnInit() {
 this.getAds();
}
 
...
您的服务:

 getAds(param): Observable<Ad[]> {
  const params = new HttpParams()
  .set('category', param);
  return this.http.get<Ad[]>(apiUrl + "ads",{params}).pipe(
    tap(),
    catchError(this.handleError("getAds", []))
  );
 }
 

最好的解决方案是,如果您需要收听queryParams更改,请使用switchMaprxjs运算符,这将在case中取消以前的http调用或新的查询参数值,如果用户在短时间内单击了多个链接,则仅最近单击的链接将被视为相同的问题,
http://localhost:4200/ads?category=multimedia
是链接前端,对于请求,这是出现的
http://localhost:9191/ads?0=m&1=u&2=l&3=t&4=i&5=m&6=e&7=d&8=i&9=a
这在您的服务中非常奇怪,请更改getAds(param):可观察{const params=new HttpParams().set('category',param);返回this.http.get(apirl+“ads”,{params}).pipe(tap(),catchError(this.handleError(“getAds”,[]));}这实际上是可行的,但仍然存在关于多个参数的问题,我如何才能做到这一点?例如:``,使用此方法,我只获取secon参数。在这种情况下,如何使用相同名称的参数:getAds(param1:string,param2:string):可观察的{const params=new HttpParams().set('category',param1.set('category',param2);返回此.http.get(apirl+“ads”,{params}.pipe(tap(),catchError(这是handleError(“getAds”,[]);