Маршрутизатор Angular 2 оценивает несколько параметров маршрута
В моем приложении у меня есть маршруты с несколькими параметрами, например
http://localhost:3000/department/6/employee/45/sales?from=20160921&to=20160928
Как мне лучше всего подойти к оценке этих параметров? Я могу подписаться на params
а также queryParams
из ActivatedRoute
,
this.route.params.subscribe(params => ...load data for params);
this.route.queryParams.subscribe(queryParams=> ...load data for queryParams);
Однако, это, конечно, приведет к двойной загрузке. Кроме того, мне всегда нужны обе части информации, например sales
а также from
/to
из приведенного выше примера.
Таким образом, приведенный выше код становится
this.route.params.subscribe(params => {
let queryParams = this.route.snapshot.queryParams;
...load data for params/queryParams
}
this.route.queryParams.subscribe(queryParams => {
let params = this.route.snapshot.params;
...load data for params/queryParams
}
И у меня до сих пор нет решения проблемы запуска нагрузки дважды.
Что еще хуже, я также должен выяснить, сколько уровней мне нужно подняться в моем ActivatedRoute
так что нередко видеть
this.route.parent.parent.parent.params.subscribe(...)
Тьфу. И это в любом случае нарушает ленивый загруженный компонент. В любом случае, это много стандартного кода, чтобы просто получить несколько параметров маршрута.
Я делаю это неправильно? Есть ли рекомендуемый способ сделать это?
1 ответ
Вы можете попробовать ниже,
paramSubscription = Observable.forkJoin(
this.route.params,
this.route.queryParams,
this.route.parent.parent.parent.params
).subscribe(res => {
this.combinedParams = { params :res[0], queryParams :res[1], ancestorParam : res[2] };
// Load data
});
// unsubscribe from the subscription
ngOnDestroy = () => {
this.paramSubscription.unsubscribe();
}
Обратите внимание, что я еще не проверял этот код.
Надеюсь это поможет!!