Данные ActivatedRoute не меняются при навигации по одному и тому же URL с разными параметрами запроса - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь реализовать фильтр, и как только пользователь отправляет форму фильтра, я передаю содержимое формы в виде параметров запроса, а распознаватель выполняет сервисный вызов для получения нового содержимого на основе критериев фильтра.

Вот как я настроил свой маршрут (ReferralsPage - это компонент с отложенной загрузкой)

//app-routing.module.ts
    {
        path: 'home',
        resolve: {
          loggedIn: AuthenticationResolver
        },
        children: [
          { path: '', redirectTo: 'referrals', pathMatch: 'full' },
          { path: 'referrals', loadChildren: './pages/referrals/referrals.module#ReferralsPageModule' }]
    }

//referralsPageModule.ts
    const routes: Routes = [
      {
        path: '',
        component: ReferralsPage,
        resolve: {
          response: ReferralsResolver
        },
        runGuardsAndResolvers: 'paramsOrQueryParamsChange'
      }
    ];

И маршруты передаются в методе forChild() RouterModuleимпортировано в ReferralsPageModule .

Это функция resolve() в моем ReferralsResolver

resolve(snapshot: ActivatedRouteSnapshot): Observable<ReferralSearchResponse> {
    const criteria = this._getFilterCriteria(snapshot);
    const sort = (criteria && criteria.sort) ? criteria.sort : '-lastUpdated';
    return this._referralsService.getReferrals(1, 25, sort, criteria)
        .pipe(tap(console.log))
  }

И, наконец, это подписка на активированные данные маршрутав моем компоненте.

 ngOnInit() {
    this._activatedRoute.data.subscribe((val) => {
      console.log(val);
    })
}

Вот как я использую router.navigate(), чтобы оставаться на странице с другими queryParams.

this._router.navigate([], { relativeTo: this._activatedRoute, queryParams: this.filterCriteria })

Моя проблема в том, что активированRouteData подписка получает разрешенные данные первый раз.Однако после применения фильтров и изменения queryParams мой распознаватель запускается и получает данные с сервера.Однако подписка activRouteData никогда не получает никаких новых данных.

1 Ответ

0 голосов
/ 24 марта 2019

альтернативное решение, вы можете принудительно перезагрузить компонент внутри вашего конструктора

constructor(private router: Router) {
   this.router.routeReuseStrategy.shouldReuseRoute = () => false;
}
...