передача необязательных параметров строки запроса в вызов службы http - PullRequest
0 голосов
/ 28 мая 2018

мне нужно сделать вызов 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, для которого это понятно.

Как сделать вызов службы, чтобы игнорировать параметр "arg2", если значение не было возвращено из переменной param2?

Ответы [ 4 ]

0 голосов
/ 02 апреля 2019

Вы можете попробовать что-то вроде этого:

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);
 }
0 голосов
/ 28 мая 2018

Переключитесь на определение объекта, чтобы сократить ваш код (другие решения сделают его длиннее):

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

Аргумент объявляется как объект, который может иметь строковый ключ со строковым значением, и выпередать его непосредственно в качестве параметров вашего URL (свойства с одинаковым именем не нужно записывать дважды)

0 голосов
/ 28 мая 2018

вместо передачи двух значений в компоненте, вы можете передать объект

// Предполагая, что 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 не определенили ноль

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); 
        }
0 голосов
/ 28 мая 2018

Вы можете сделать что-то вроде этого:

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

Надеюсь, это будет полезно!

...