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