Ni55aN
@Ni55aN

Как предотвратить ошибку при смене роута для именованного router-outlet в Angular 5.2?

Есть первичный <router-outlet> в главном компоненте, которые по определенному роуту подгружает ParentComponent. Он находится в своем модуле, который в свою очередь имеет модуль с роутингом:

const routes: Routes = [
	{
		path: ':id',
		component: ParentComponent,
		children: [
			{
				path: 'child',
				loadChildren: './child.module#ChildModule'
			}
		]
	}
];


Далее в ChildComponent идут свои вложенные роуты:

const routes: Routes = [
	{
		path: 'foo',
		component: './foo.module#FooModule',
               outlet: 'child'
	},
        {
		path: 'bar',
		component: './bar.module#BarModule',
               outlet: 'child'
	}
}


В этом ParentComponent есть <router-outlet name="child">. В него и должно подгружаться содержимое LazyModule при пути вида /3544/child/lazy. Это так и происходит, только на один раз.
Например:
перехожу по роуту this.router.natigate([id, 'child', 'foo'])
потом по роуту this.router.natigate([id, 'child', 'bar'])

И получаю ошибку:
Error: Cannot activate an already activated outlet
  • Вопрос задан
  • 507 просмотров
Решения вопроса 1
Ni55aN
@Ni55aN Автор вопроса
В 5.2 это еще не было исправлено. https://github.com/angular/angular/pull/20712

Решение: вручную через ViewChild получить директиву и деактивировать outlet при смене роута
@ViewChild(RouterOutlet) outlet: RouterOutlet;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы