2016-09-29 2 views
1

내 앱에는 여러 매개 변수가있는 경로가 있습니다.다중 경로 매개 변수를 평가하는 각도 2 라우터

http://localhost:3000/department/6/employee/45/sales?from=20160921&to=20160928 

이러한 매개 변수를 평가하는 가장 좋은 방법은 무엇입니까? 나는 paramsActivatedRoutequeryParams에 가입 할 수 있습니다

this.route.params.subscribe(params => ...load data for params); 
this.route.queryParams.subscribe(queryParams=> ...load data for queryParams); 

그러나, 이것은 물론, 두 번로드를 트리거합니다. 또한 위의 예에서 항상 두 정보가 필요합니다 (예 : salesfrom/ 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(); 
} 

것은 아직이 코드를 테스트하지 않았습니다 유의하시기 바랍니다.

희망이 도움이됩니다!

관련 문제