Маршрутизатор 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();
}

Обратите внимание, что я еще не проверял этот код.

Надеюсь это поможет!!

Другие вопросы по тегам