Я пытаюсь реализовать фильтр, и как только пользователь отправляет форму фильтра, я передаю содержимое формы в виде параметров запроса, а распознаватель выполняет сервисный вызов для получения нового содержимого на основе критериев фильтра.
Вот как я настроил свой маршрут (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 никогда не получает никаких новых данных.