我需要进行API调用,这允许我通过可选的查询sting参数
retrieveConts(param1:string,param2?:string):Observable<IContracts> {
this.basePath = "/myConts";
return http.get(this.basePath,{
params: {
arg1:param1,
arg2:param2,
},
withCredentials: false
})
.catch(this._errorHandler);
}
使用上面的代码spinet,我已经将param2声明为可选参数,可以或不可以传递给服务调用,但是如果param2没有值,则返回undefined
,这是可以理解的。
如果没有从param2变量返回值,如何使服务调用忽略“arg2”参数?
你可以这样做:
retrieveConts(param1:string,param2?:string):Observable<IContracts> {
this.basePath = "/myConts";
let params = {arg1: param1};
if (param2)
params = {arg1: param1, arg2: param2};
return http.get(this.basePath, {
params: params,
withCredentials: false
})
.catch(this._errorHandler);
}
希望这会有所帮助!
而不是在组件中传递两个值,您可以传递一个对象
//假设userService是组件中的服务//代码
userService.retrieveConts({arg1:"val1",arg2:"val2"})
// userService中的代码
retrieveConts(param:any):Observable<IContracts> {
this.basePath = "/myConts";
return http.get(this.basePath,{
params: param,
withCredentials: false
})
.catch(this._errorHandler);
}
或者您也可以检查param2并将其附加到对象
retrieveConts(param1:string,param2?:string):Observable<IContracts> {
this.basePath = "/myConts";
let params = {arg1: param1};
if (param2) params.arg2 = param2;
return http.get(this.basePath, {
params: params,
withCredentials: false
})
.catch(this._errorHandler);
}
如果param2未定义或为null,则传递空val
retrieveConts(param1:string,param2?:string):Observable<IContracts> {
this.basePath = "/myConts";
return http.get(this.basePath, {
params: {arg1: param1, arg2: param2 || ''},
withCredentials: false
})
.catch(this._errorHandler);
}
要么
retrieveConts(param1:string,param2?:string=""):Observable<IContracts> {
this.basePath = "/myConts";
return http.get(this.basePath, {
params: {arg1: param1, arg2: param2},
withCredentials: false
})
.catch(this._errorHandler);
}
你可以尝试这样的事情:
retrieveConts(p1,p2?): Observable<IContracts> {
this.basePath = "/myConts";
let params = {argument1: p1};
if (p2)
params = {argument1: p1, argument2: p2};
return http.get(this.basePath, {
params: params,
withCredentials: false
})
.catch(this._errorHandler);
}
切换到对象定义以缩短代码(其他解决方案会使代码更长):
retrieveConts(params: { [key: string]: value: string }) {
return http
.get('/myConts', {
params,
withCredentials: false
})
.catch(this._errorHandler);
}
该参数被声明为一个对象,它可以包含一个带字符串值的字符串键,并直接将其作为URL的参数传递(具有相同名称的属性不需要写入两次)