【问题标题】:Angular routing precedence in two modules两个模块中的角度路由优先级
【发布时间】:2018-03-08 02:53:29
【问题描述】:

如果 Angular 应用有两个模块:AppModule 和 ProfileModule,它们可以配置自己的路由。

在this 指南中,它说路由配置的顺序很重要。举个例子:

const appRoutes: Routes = [
  { path: 'crisis-center', component: CrisisListComponent },
  { path: 'hero/:id',      component: HeroDetailComponent },
  {
    path: 'heroes',
    component: HeroListComponent,
    data: { title: 'Heroes List' }
  },
  { path: '',
    redirectTo: '/heroes',
    pathMatch: 'full'
  },
  { path: '**', component: PageNotFoundComponent }
];

这里首先评估crisis-center 路径,最后评估** 路径。

但是,如果AppModule 和ProfileModule 配置了自己的路由,则不清楚特定路由的评估是如何发生的。如果AppModule 路由配置最后有一个** 路由,如上述配置,这将匹配与AppModule 中的其他路由不匹配的所有路由。这将使ProfileModule 的路由配置无用。

那么,当有多个模块具有自己的路由配置时,路由的优先级如何工作?

【问题讨论】:

    标签: angular


    【解决方案1】:

    根据那些Angular Docs:

    每个路由模块都按导入顺序扩充路由配置。如果先列出 AppRoutingModule,则通配符路由将在 hero 路由之前注册。匹配每个 URL 的通配符路由将拦截导航到 hero 路由的尝试。

    因此,顺序基于您导入模块的顺序。在您的示例中,您需要先导入ProfileModule,以便AppModule 路由列表末尾的** 路由不会阻止处理任何其他路由。

    【讨论】:

    【解决方案2】:

    在多个模块的情况下,通配符路由应该是在整个应用程序中,就像每个模块中都存在一样,首先导入的一个模块的路由将优先于所有其他模块的整个路由集..

    1. 导入 ModA 路线

      常量 ModA_Route = [
      {路径:'moda',组件:ModAComp},
      {path: 'moda:id', component: ModADetailComp}
      这里没有默认路由 ]

    2. 导入 ModB 路由

      常量 ModB_Route = [ {路径:'modb',组件:ModBComp},
      {path: 'modb:id', component: ModBDetailComp}
      这里没有默认路由 ]

    3. 现在是默认路由...这将登陆应用程序自己的欢迎页面或类似页面

    如果您为模块添加默认路由,这将如何与任何其他模块的默认路由区分开来...模块的入口点(app/modA 或 app/modB)本身应该是模块的默认入口点本身.. 其他任何东西都应该默认为应用程序自己的逻辑

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多