Как улучшить параметры в методе TypeScript / Angular? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть функция, которая может иметь некоторые параметры:

public find(
    cadnum: string,
    pagesize: number,
    startid?: string
  ): Observable<any> {
    let url = "";

    if (cadnum) {
       url+= "?cadnum=" + cadnum;  
    }

     if (pagesize) {
       url+= "&pagesize=" + pagesize;  
    }

 if (startid) {
       url+= "&startid=" + startid;  
    }

    return this.httpClient.get(url);
} 

Как видите, я должен проверить все параметры и объединить строковый URL ...

Как улучшить эту часть, потому что У меня еще параметры

Ответы [ 3 ]

1 голос
/ 07 мая 2020

Вы можете использовать объект как параметр, а затем l oop для его атрибутов

// Convert an object to HttpParams
// Function I picked up from JHipster :p
const createRequestOption = (params?: any): HttpParams => {
    let options: HttpParams = new HttpParams();
    if (params) {
        Object.keys(params).forEach(key => {
            if (req[key] != null) {
                options = options.set(key, req[key]);
            }
        });
    }
    return options;
};

public find(params? :any): Observable<any> {
    const url = 'http://...';
    const options = createRequestOption(params);
    return this.httpClient.get(url, { params: options});
}

Если вы хотите использовать строгий тип, он также должен работать с

public find(params: {
    cadnum: string,
    pagesize: number,
    startid?: string
}): Observable<any> {
    const url = 'http://...';
    const options = createRequestOption(params);
    return this.httpClient.get(url, { params: options});
}

1 голос
/ 07 мая 2020

Вышеупомянутое можно упростить следующим образом:

return this.httpClient.get(url, { 
  headers: { 'Content-Type': 'application/json' },
  params: {
    cadnum, 
    pagesize,
    startid,
  },
});

В качестве альтернативы вы можете объединить параметры функции find в объект перед передачей его в httpClient:

const params: HttpParams = {
  cadnum, 
  pagesize,
  startid,
  // other parameters 
};

return this.httpClient.get(url, { 
  headers: { 'Content-Type': 'application/json'},
  params, 
});
0 голосов
/ 07 мая 2020

Измените свою функцию, которая будет принимать массив в качестве входных данных. Затем l oop для каждого значения и установите для него свой URL.

public find(
    parameters: any[]
  ): Observable<any> {
    let url = "";

parameters.forEach(function (value) {

if (value) {
       url+= "&"+value+"=" + value;  
    }
});

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...