Angular: добавить параметры запроса к URL

Я использую это:

    import { HttpParams } from '@angular/common/http';
    let params = new HttpParams();
    params.append('newOrdNum','123');

Но это не работает, я не добавляю параметр в URL. Любое предложение?


person None    schedule 14.09.2017    source источник
comment
Вам нужен такой параметр, как example.com/newordnum/123?   -  person Salim Ibrogimov    schedule 14.09.2017
comment
Возможный дубликат Почему HttpParams не работает в несколько строк в angular 4.3   -  person Jota.Toledo    schedule 14.09.2017
comment
я хочу добавить к существующим параметрам. У меня есть что-то вроде этого: example.com?param1=111, и теперь я хочу добавить, чтобы получить example.com?param1=111&newOrdNum=123   -  person None    schedule 14.09.2017
comment
@Jota.Toledo не добавляет параметр в URL-адрес вашего примера   -  person None    schedule 14.09.2017
comment
Вы пытаетесь отправить запрос с параметрами запроса или изменить текущее состояние URL-адреса браузера? Если это второе, то вам нужно лучше объяснить, что вы пытаетесь заархивировать.   -  person Jota.Toledo    schedule 14.09.2017
comment
я просто хочу добавить параметр к URL-адресу... я собираюсь обработать этот параметр на каком-то другом этапе.. но прямо сейчас просто добавить существующий URL-адрес, где у меня есть другие параметры   -  person None    schedule 14.09.2017
comment
когда параметры вашего запроса изменяются, это также отражается в URL-адресе?   -  person Tisha    schedule 08.12.2019


Ответы (7)


Это можно заархивировать с помощью класса Router:

Использование компонента:

import { Router, ActivatedRoute } from '@angular/router';

@Component({})
export class FooComponent {
   constructor(
     private _route: ActivatedRoute,
     private _router: Router
   ){}

   navigateToFoo(){
     // changes the route without moving from the current view or
     // triggering a navigation event,
     this._router.navigate([], {
      relativeTo: this._route,
      queryParams: {
        newOrdNum: '123'
      },
      queryParamsHandling: 'merge',
      // preserve the existing query params in the route
      skipLocationChange: true
      // do not trigger navigation
    });
   }
}

Для получения дополнительной информации см. эту книгу и angular API маршрутизатора

person Jota.Toledo    schedule 14.09.2017
comment
должен ли я видеть это в URL-адресе или это происходит за кулисами? - person Omar; 26.04.2018
comment
когда skipLocationChanges равно true, URL-адрес не показывает его. что хорошо. но я так и не понял, что происходит, когда false... Знаете? - person Omar; 27.04.2018
comment
когда параметры вашего запроса изменяются, это также отражается в URL-адресе? - person Tisha; 08.12.2019
comment
Что, если бы это была карта Google, а широта и долгота должны были быть добавлены к URL-адресу, чтобы любое действие пользователя по панорамированию на карте также приводило к обновлению параметров запроса в URL-адресе по мере изменения широты и долготы? - person Tisha; 08.12.2019
comment
Когда skipLocationChanges равно false URL показывает параметры - person Isuru; 25.02.2021

Пришлось немного подкорректировать ответ Jota.Toledos, чтобы он работал у меня, пришлось вынести второе и последнее свойство экстры — объект:

   navigateToFoo(){
     this._router.navigate([], {
      queryParams: {
        newOrdNum: '123'
      },
      queryParamsHandling: 'merge',
    });
   }
person Jan Clemens Stoffregen    schedule 16.04.2019
comment
когда параметры вашего запроса изменяются, это также отражается в URL-адресе? - person Tisha; 08.12.2019

Вы должны написать

let params = new HttpParams();
params = params.append('newOrdNum','123');
person Ula    schedule 06.10.2020

Вы должны использовать модуль Router. проверьте этот документ: https://angular.io/guide/router

Вам нужно импортировать эти модули: import { Router, ActivatedRoute, ParamMap } from '@angular/router';

person Salim Ibrogimov    schedule 14.09.2017
comment
как добавить только существующие с маршрутизатором? без записи пути - person None; 14.09.2017
comment
@None: используют Router - person Salim Ibrogimov; 14.09.2017
comment
@None: прочитайте этот документ, пожалуйста: https://angular.io/api/common/http/HttpParams - person Salim Ibrogimov; 14.09.2017

Вы захотите взять текущее состояние параметров запроса из Angular Router, изменить эти реквизиты (добавить/удалить параметры), а затем переназначить их с помощью Router:

// Make sure to import and define the Angular Router and current Route in your constructor
constructor(
  private router: Router,
  private route: ActivatedRoute
) {}

...
...
...

// Take current queryParameters from the activated route snapshot
const urlParameters = Object.assign({}, this.route.snapshot.queryParams); 

// Need to delete a parameter ?
delete urlParameters.parameterName;

// Need to add or updated a parameter ?
urlParameters.parameterName = newValue;

// Update the URL with the Angular Router with your new parameters
this.router.navigate([], { relativeTo: this.route, queryParams: urlParameters });


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

handleUrlParameters(paramsToAdd: {param: string}[], paramsToDelete?: string[]) {
  const urlParameters = Object.assign({}, this.route.snapshot.queryParams); 

  paramsToDelete.forEach(param => delete urlParameters[param]);

  Object.keys(paramsToAdd).forEach(param => urlParameters[param] = paramsToAdd[param]);

  this.router.navigate([], { relativeTo: this.route, queryParams: urlParameters });
}

А затем вы просто вызываете handleUrlParameters с объектом, сопоставляющим параметр с новыми значениями, или с массивом имен параметров для удаления.

person Jeff Gilliland    schedule 14.11.2019

Убедитесь, что при передаче значения параметров запроса не должно быть неопределенным.

      this.router.navigate([yourRoute,
         queryParams : 
              {
                key : (yourValue ? yourValue : '')
              },
         queryParamsHandling: 'merge'
            ]);
      
person Bharat chaudhari    schedule 05.02.2020

this.router.navigate(['.'], { relativeTo: this.route, queryParams: { 'a': 'b' }, queryParamsHandling: 'merge', skipLocationChange: true});

маршрутизатор: Маршрут маршрутизатора: ActivatedRoute

person Giggs    schedule 01.02.2021