Я хотел бы иметь сервис, который имеет видимый переменный, зависящий от текущего URL.Получить первый параметр маршрута в службе
:programID -- program overivew
:programID/bug -- bug list
:programID/bug/:bugID -- bug overview
Где programID
может переключаться в любой момент. Я сделал услугу, что от того, что я понял из angular docs, должна наблюдаемого с параметрами
ProgramService: (экстракт)
currentProgramID: number
constructor(
private router: Router,
private route: ActivatedRoute,
private http: Http){
this.route.params.subscribe((params: Params) => {
console.log('Parent:', params['programID'])
})
this.route.children[0].params.subscribe((params: Params) => {
console.log('Childern:', params['programID'])
// Works if loaded while at url : 'abc123/bug/abc123'
})
this.route.params.subscribe((params: Params) => {
console.log('Hacky?:', this.route.snapshot.params['programID'])
})
}
компонента, которые нуждаются в текущей ссылке программы: (экстракт)
program: Promise<program>
constructor(
private programService: ProgramService, ...){}
ngOnInit() {
this.program = this.programService.getProgram(/*current program*/)
...
}
Однажды я получаю только programID
, и когда страница загружается с правильным URL. Я даже не получаю, если после навигации.
Впоследствии я переключусь на switchMap
, но для целей тестирования это было больше на месте.
Это верно, но почему бы не наблюдаемым не вспылить? И добавляет параметр Params вручную только? – Akxe
Услуга создается только один раз. Маршрутизированные компоненты создаются каждый раз, когда приложение переходит к маршруту для этого компонента. Вот почему служба получает «ActivatedRoute», введенную только один раз. При следующем переходе к этому маршруту создается новый экземпляр «ActivatedRoute», но служба по-прежнему содержит старую (за исключением случаев, когда служба предоставляется в '@Component()' маршрутизируемого компонента, поэтому наблюдаемая не работает, потому что он устарел. –
В качестве альтернативы вы можете ввести услугу маршрутизируемым компонентам и заставить компоненты передавать параметры службе, а не обслуживать ее самостоятельно. У меня нет глубоких знаний о маршрутизаторе, там может быть другими способами, о которых я не знаю. –