如何使用 Angular 5 为同一路径使用两个路由器插座

cle*_*toy 3 router-outlet angular

我有以下模板AppComponent

<div>
    <div>
        <router-outlet name="menu"></router-outlet>
    </div>
    <div>
        <router-outlet name="main"></router-outlet>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

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

  • 当我导航到 时/page1,我希望menuoutlet 包含Menu1Componentmainoutlet 包含Main1Component
  • 当我导航到 时/page2,我希望menuoutlet 包含Menu2Componentmainoutlet 包含Main2Component

我不明白儿童和命名插座是如何工作的。我在模块导入中的路由应该是什么?

我使用 Angular 5。

vin*_*nce 7

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

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

假设您在/page1

const pageOneRoutes = {
   path: 'page1',
};
Run Code Online (Sandbox Code Playgroud)

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

const pageOneRoutes = {
   path: 'page1',
   children: [
     { path: '', outlet: 'menu', component: Menu1Component },
     { path: '', outlet: 'main', component: Main1Component }
   ]
};
Run Code Online (Sandbox Code Playgroud)

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

const pageTwoRoutes = {
   path: 'page2',
   children: [
     { path: '', outlet: 'menu', component: Menu2Component },
     { path: '', outlet: 'main', component: Main2Component }
   ]
};
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看 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
          }
        ]
      }
     ]
   ]
 } 
]
Run Code Online (Sandbox Code Playgroud)