Настройка углового маршрутизатора в полноэкранном режиме (т. Е. без верхнего и нижнего колонтитулов) на некоторых маршрутах

#angular

#angular

Вопрос:

В моем приложении Angular (v.7) я хочу, чтобы практически на всех маршрутах была панель навигации и нижний колонтитул, которые отлично работают, т. Е. Мой app.component.html выглядит примерно так :

 <header></header>
<router-outlet></router-outlet>
<footer></footer>
  

Мои маршруты выглядят так:

   {
    path: "foo",
    loadChildren: "./foo/foo.module#FooModule",
    canActivate: [AuthenticationGuard]
  },
  {
    path: "bar",
    loadChildren: "./bar/bar.module#BarModule",
    canActivate: [AuthenticationGuard]
  }
  

Для некоторых маршрутов мне требуется полноэкранная настройка, при которой верхний или нижний колонтитулы не видны.

Я хочу решить это с помощью маршрутов, а не с помощью директив, поскольку они делают все неудобным, и я не хочу обрабатывать дополнительное состояние, такое как флаг «isHeaderVisible».

Похоже, что должна быть хорошая настройка маршрутизатора, которая выполняет то, к чему я стремлюсь.

Итак, я, по сути, хочу, чтобы мой основной компонент по-прежнему был таким, как указано выше, а другой просто имел

 <router-outlet></router-outlet>
  

который получает другие маршруты

Я не могу определить настройку маршрута, которая работает для этого.

Ответ №1:

Вы можете создать 2 компонента-оболочки, такие как PublicComponent и AuthenticatedComponent

Предположим, что структура такая:

 - AppComponent
--- PublicComponent
------ LoginComponent
------ RegisterComponent
--- AuthenticatedComponent
------ DashboardComponent
------ SettingsComponent
  

Тогда ваши маршруты будут похожи:

 {
    path: '',
    component: AuthenticatedComponent,
    children: [
        {
           path: "foo",
           loadChildren: "./foo/foo.module#FooModule"
         },
        {
           path: "bar",
           loadChildren: "./bar/bar.module#BarModule",
         },
   canActivate: [AuthenticationGuard],
   canActivateChild: [AuthenticationGuard]
},
{
    path: '',
    component: PublicComponent,
    children: [
        {
           path: "login",
           component: LoginComponent
         },
         {
           path: "register",
           component: RegisterComponent
         },

}
  

И вам нужно соответствующим образом разместить router-outlet s:

AppComponent

 <router-outlet></router-outlet>
  

AuthenticatedComponent

 <header></header>
<sidebar></sidebar>
<router-outlet></router-outlet>
<footer></footer>
  

PublicComponent

 <sidebar></sidebar>
<router-outlet></router-outlet>
<another-component></another-component>
  

Надеюсь, это даст вам подсказку