В методе ngOnDestroy я отписаться от наблюдаемой, которую я подписался на один раз еще код multipletimes выполняется ...Как отписаться от obserable внутри маршрута Resolve класса
ngOnInit()
{
this.sub = this.route.params.subscribe(params =>
{
this.projectId = +params['id'];
this.projectStore.project = this.projectId;
// load data when the route changes
this._tasksService.gettasks(this.projectId).subscribe(years => { this.tasks = years.map(y => new task(y)) }); // no need to clean up the subscription
});
// load data when the component is initialized
this._tasksService.gettasks(this.projectId).subscribe(years => { this.tasks = years.map(y => new task(y)) }); // no need to clean up the subscription
}
ngOnDestroy()
{
this.sub.unsubscribe();
}
Теперь я хочу, чтобы поставить это в классе разрешения маршрутизатора, но нет ngOnDestroy - конечно - просто событие NavigationEnd, к которому я снова мог бы подписаться.
Это означает, что я подписываюсь на событие NavigationStart (которое происходит, когда я покину маршрут) для того, чтобы отписаться другой подписка, которая является маршрут Params подписки изменения Хахаха ...
Я думаю, это еще не путь , но google ничего не предлагал.
Кто-нибудь знает, как решить этот сценарий? Или следует переназначать изменения параметров, которые действительно ТОЛЬКО относятся к компоненту?
constructor(private service: TasksService, private router: Router)
{
this.navigationEnded = this.router.events
.filter(event => event instanceof NavigationStart)
.map(() => this.router.routerState.root)
.subscribe((event) =>
{
this.navigationEnded.unsubscribe();
});
}
UPDATE
Когда я ставлю этот код в Resolve метода:
this.route.params.subscribe(params =>
{
// reload data by the new id parameter does not work with params
// I have to use inside here: route.params['id']
});
нет идентификатора в массиве Params, его только длины 0.
Вместо этого мне нужно использовать route.params ['id'], чтобы узнать, как это сделать, но почему?
Мне не совсем ясно, в чем проблема или что вы на самом деле пытаетесь выполнить. Почему, по-вашему, вам нужно отказаться от подписки? Маршрутизатор, внедренный в сервис, является корневым маршрутизатором, и этот маршрутизатор будет оставаться неизменным на весь срок службы приложения. –
Я пытаюсь выполнить: я хочу поместить рабочий код из ngOnInit/ngOnDestroy в класс разрешения маршрутизатора, и поведение должно быть одинаковым без класса разрешения маршрутизатора. – Pascal
Я хотел бы использовать функцию разрешения, потому что загрузка данных, а затем активация вида маршрута имеет лучший конечный пользователь UX. – Pascal