3

我有以下模板AppComponent

<div>
    <div>
        <router-outlet name="menu"></router-outlet>
    </div>
    <div>
        <router-outlet name="main"></router-outlet>
    </div>
</div>

我想在两种情况下使用这个模板:

  • 当我导航到时/page1,我希望menuoutlet 包含Menu1Component并且mainoutlet 包含Main1Component
  • 当我导航到时/page2,我希望menuoutlet 包含Menu2Component并且mainoutlet 包含Main2Component

我不明白孩子和命名的网点是如何工作的。我在模块导入中的路线应该是什么?

我使用 Angular 5。

4

1 回答 1

8

这样做的总体方法是在您想要的路线上进行模式匹配,并为每个出口提供空的子路线。

格式(带括号、花括号和缩进)一目了然有点难以阅读,所以我将在这里隔离每条路线并解释一下......

假设您在/page1

const pageOneRoutes = {
   path: 'page1',
};

该路径有两个子路由(每个出口都有自己的子路由)。这两个子路径都是“空”路径,因为您希望自己的子路径匹配page1

const pageOneRoutes = {
   path: 'page1',
   children: [
     { path: '', outlet: 'menu', component: Menu1Component },
     { path: '', outlet: 'main', component: Main1Component }
   ]
};

/page2然后,您只需对要加载的其他组件重复此过程。

const pageTwoRoutes = {
   path: 'page2',
   children: [
     { path: '', outlet: 'menu', component: Menu2Component },
     { path: '', outlet: 'main', component: Main2Component }
   ]
};

有关更多信息,请查看 Angular 路由教程的这一部分,它使用这种方法在子路由中进行模式匹配:https ://angular.io/guide/router#child-route-configuration 。


整个事情可能看起来像这样:

const ROUTES: Routes = [
 {
   outlet: 'primary',
   path: '',
   children: [
     {
       path: 'page1',
       children: [
         { 
           path: '',
           outlet: 'menu',
           component: Menu1Component
         },
         {
           path: '',
           outlet: 'main',
           component: Main1Component
         }
      },
      {
        path: 'page2',
        children: [
          { 
           path: '',
           outlet: 'menu',
           component: Menu2Component
          },
          {
           path: '',
           outlet: 'main',
           component: Main2Component
          }
        ]
      }
     ]
   ]
 } 
]
于 2018-02-16T17:22:00.930 回答