Как перейти к тому же URL, но изменить (или добавить, если пропущен) один из параметров запроса - PullRequest
0 голосов
/ 30 августа 2018

Есть ли простой способ добиться этого?

Например, я хочу установить / изменить параметр запроса qp на значение 111:

/p1/ ----> /p1/?qp=111
/p2/ ----> /p2/?qp=111
/p1/?ee=22 ----> /p1/?ee=22&qp=111
/p1/?ee=22&qp=222 ----> /p1/?ee=22&qp=111

и т.д.

Я пытался сделать router.navigate([], { queryParams: { qp: '111' } }); но он просто заменяет все параметры запроса на qp=111, если я установил queryParamsHandling: 'preserve' URL не меняется вообще ...

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Сначала нам нужно получить существующие параметры запроса

const queryParams: Params = Object.assign({}, this.activatedRoute.snapshot.queryParams);

// Do something with the params
queryParams['myParam'] = 'myNewValue';

this.router.navigate(['.'], { queryParams: queryParams });
0 голосов
/ 30 августа 2018

Вам нужно передать свой текущий ActivatedRoute

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

  constructor(
    private activatedRoute: ActivatedRoute
  ) {
    this.routeSnapshot = activatedRoute.snapshot['_routerState'].url;
  }

  this.router.navigate([this.routeSnapshot], {queryParams: { qp: '111' }});
0 голосов
/ 30 августа 2018

Вы можете объединить с текущими параметрами запроса.

Чтобы получить их, введите ActivatedRouteSnapshot как routeSnap и получите доступ к параметрам запроса как

const oldParams = this.routeSnap.queryParams

Вы также можете получить этот объект, введя ActivatedRoute и получив доступ к параметрам запроса с помощью this.route.snapshot.queryParams.

В ваших примерах это даст вам:

/p1/              ----> {}
/p2/              ----> {}
/p1/?ee=22        ----> {ee: 22}
/p1/?ee=22&qp=222 ----> {ee: 22, qp: 222}

Теперь вы можете перемещаться, сливаясь с этим объектом.

this.router.navigate([], {...oldParams, qp: 11})
...