Есть ли способ предотвратить запуск RouterEvent? - PullRequest
1 голос
/ 23 мая 2019

У меня есть приложение, в котором мне нужно было сохранить состояние формы фильтра в строке URL.

Вы можете увидеть реализацию здесь

Хотяизменяя значение формы, я хочу установить его как состояние URL, но this.router.navigation([], { queryParams }) испускает событие, которое там не нужно.

   data$ = merge(
    this.router.events.pipe(
      filter((e: NavigationEnd) => e instanceof NavigationEnd),
      map(({ url }: NavigationEnd) => {
        const { queryParams } = this.router.parseUrl(url);
        if (queryParams['completed']) {
          queryParams['completed'] = queryParams['completed'] === 'true';
        }
        this.form.patchValue(queryParams, { emitEvent: false });
        return queryParams;
      }),
    ),
    this.form.valueChanges.pipe(
      debounceTime(200),
      tap((queryParams: Task) => {
        this.router.navigate([], { queryParams })
      })
    )
  ).pipe(
    switchMap((query?: Task) => this.getData(query))
  );

Возможно ли как-то предотвратить отправку события навигации?

Нужно что-то похожее с this.form.patchValue(queryParams, { emitEvent: false });

1 Ответ

1 голос
/ 29 мая 2019

location.go(url) - это то, что вам нужно.
Вы всегда можете сгенерировать правильный URL в router.createUrlTree() метод

const url = this.router
        .createUrlTree(
          [{foo: 'bar'}],
          {relativeTo: this.activatedRoute}
        )
        .toString();
this.location.go(url);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...