将可选的查询字符串参数传递给http服务调用

时间:2018-05-28 10:55:20

标签: angular angular5 angular-httpclient

我需要进行API调用,这允许我通过可选的查询sting params

 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”参数?

5 个答案:

答案 0 :(得分:1)

您可以这样做:

-(void)viewWillAppear:(BOOL)animated

希望这会有所帮助!

答案 1 :(得分:1)

而不是在组件中传递两个值,您可以传递一个对象

//假设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); 
    }

或传递空val,如果param2未定义或为null

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); 
        }

答案 2 :(得分:1)

您可以尝试以下操作:

Get-Package | Select-Object Id,LicenseUrl

答案 3 :(得分:0)

切换到对象定义以缩短代码(其他解决方案会使代码更长):

retrieveConts(params: { [key: string]: value: string }) {
  return http
    .get('/myConts', { 
      params,
      withCredentials: false
    }) 
    .catch(this._errorHandler); 
}

该参数被声明为一个对象,它可以包含一个带字符串值的字符串键,并直接将其作为URL的参数传递(具有相同名称的属性不需要两次写入)< / p>

答案 4 :(得分:0)

我建议进行一个小的更改: 代替:

    this.basePath =  "/myConts"; 
    let params = {arg1: param1};
    if (param2) params.arg2 = param2;

        return http.get(this.basePath, { 
            params: params,
            withCredentials: false
        }) 
        .catch(this._errorHandler); 
    }

我会做的:

        this.basePath =  "/myConts"; 
    let params = {arg1: param1};
    if (param2) params['arg2'] = param2;

        return http.get(this.basePath, { 
            params: params,
            withCredentials: false
        }) 
        .catch(this._errorHandler); 
    }

这样做可以避免例如Angular中的编译错误。

相关问题