Angular Typescript отправляет необязательные param-параметры restful, только если они не пусты - PullRequest
0 голосов
/ 09 июня 2018

Нынешняя система, которой я управляю, - это только внешний интерфейс Angular 5 (таким образом, Typescript).Backend не должен иметь значения, но есть команда, в которой они не меняют свои подписи, обрабатывают ошибки и т. Д.: /

Проблема в том, что существует экран поиска, в котором требуется только 1 поле, поэтомукогда я пытаюсь отправить URL-адрес бэкэнду Restful (на самом деле, когда я набираю это .. это не совсем restful, не так ли?)

Мой метод службы Angular:

getSearchByUserResults(first,last,user,eff,term,emp) {

       //IF I JUST DO THIS, THEN EMPTY PARAMS ARE SENT AND SOMEHOW THE BACKEND IS NOT SET UP TO HANDLE THAT  :/ 
       //var params = "userid=" + user + "&first-name=" + first + "&last-name=" + last + "&eff-date=" + eff + "&term-date=" + term + "&employee-id=" + emp;

    //Sending only userid works
    //var params = "userid=" + user;

    // Send user and first when first name is empty(null) again it does NOT work
    var params = "userid=" + user + "&first-name=" + first;



    var searchUser = this._searchByUser + params;


    return this._http.get(searchUser).map((response: Response) => response.json()).catch(this.handleError);
}

В основном то, что я показываю, в комментариях выше.

Если параметр пустой или нулевой, то я НЕ хочу, чтобы он был добавлен в список параметров, отправляемых на метод контроллера сервера ...

  1. , еслиuser = 123 отправить http://server.com:9080//rest/config/users?userid=123
  2. если имя пользователя и имя не пусто отправить http://server.com:9080//rest/config/users?userid=123&first-name=Ted
  3. Никогда не отправляйте что-либо с пустыми параметрами, как это пустое имя http://server.com:9080//rest/config/users?userid=123&first-name=

Основываясь на этом списке параметров, как я могу сделать это без кучки операторов if, проверяющих null / empty / undefined?

first,last,user,eff,term,emp

1 Ответ

0 голосов
/ 09 июня 2018

Оказывается, я неправильно прочитал документы, и HttpParams не будет автоматически удалять нулевые значения.

Однако вы можете использовать функцию массива для этого:

getParams(first,last,user,eff,term,emp): HttpParams {
    let obj = {first, last, user, eff, term, emp};
    return Object.keys(obj).reduce((params, key) => 
            obj[key] ? params.append(key, obj[key]) : params, new HttpParams())
}

Это создаст HttpParams объект, который включает только истинные значения, поэтому он исключит null / undefined / пустые строки и т. Д.

Имейте в виду, что false и 0 также являются ложными значениями - я не уверен, будет ли это проблемой в вашем случае использования.

...