2016-09-29 14 views
1

В моем приложении у меня есть маршруты с несколькими параметрами, например.Угловой 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(); 
} 

Пожалуйста, обратите внимание, я не проверял этот код еще.

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

Смежные вопросы