【问题标题】:Angular 2 route is getting loaded into the top level router-outlet despite having a specified router-outlet defined on the route尽管在路由上定义了指定的路由器插座,但 Angular 2 路由仍被加载到顶级路由器插座中
【发布时间】:2016-10-21 08:08:14
【问题描述】:

这里你可以看到问题:

admin-area-models-models 应该被渲染到名称为models-content 的路由器出口中,但它被放置在与父模块相同的路由器出口中,即admin-area-models。这没有任何意义,因为我在admin-area-models 路由器中得到了这个:

const routes: Routes = [
  {
    path: '',
    component: ModelsComponent
  },
  {
    path: 'brands',
    loadChildren: '../pages/+models-brands/models-brands.module#ModelsBrandsModule',
    outlet: 'models-content'
  },
  {
    path: 'models',
    loadChildren: '../pages/+models-models/models-models.module#ModelsModelsModule',
    outlet: 'models-content'
  },
  {
    path: 'models/:id',
    loadChildren: '../pages/+model/model.module#ModelModule',
    outlet: 'models-content'
  }
];

@NgModule({
  imports: [
    ComponentsModule,
    SharedModule,
    RouterModule.forChild(routes)
  ],
  declarations: [
    ModelsComponent
  ]
})

export class ModelsRouterModule {}

为什么当我定义了一个特定的出口时,它仍然将它呈现到顶层?

编辑:

如果我更改为子路由,则改为这样定义:

const routes: Routes = [
  {
    path: '',
    component: ModelsComponent,
    children: [
      {
        path: 'brands',
        loadChildren: '../pages/+models-brands/models-brands.module#ModelsBrandsModule',
        outlet: 'models-content'
      },
      {
        path: 'models',
        loadChildren: '../pages/+models-models/models-models.module#ModelsModelsModule',
        outlet: 'models-content'
      },
      {
        path: 'models/:id',
        loadChildren: '../pages/+model/model.module#ModelModule',
        outlet: 'models-content'
      }
    ]

  }
];

那么所有路由都不起作用。 ModelsComponent 位于 /admin/dashboard/models,因此在第一个配置中,我显示了所有可访问的路由,如下所示:

/admin/dashboard/models
/admin/dashboard/models/(models-content:brands)
/admin/dashboard/models/(models-content:models)
/admin/dashboard/models/(models-content:models/5) // Any number

但是在尝试使用children 的配置时,我无法再访问这些路由中的任何一个。建议将此语法与延迟加载的文件一起使用是错误的。

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    因为您的 admin-area-models-models 不是您的 admin-area-models 的子级,所以您的路线需要类似于:

    const routes: Routes = [
      {
        path: '',
        component: ModelsComponent,
        children: [
          {
            path: 'brands',
            loadChildren: '../pages/+models-brands/models-brands.module#ModelsBrandsModule',
            outlet: 'models-content'
          },
          {
            path: 'models',
            loadChildren: '../pages/+models-models/models-models.module#ModelsModelsModule',
            outlet: 'models-content'
          },
          {
            path: 'models/:id',
            loadChildren: '../pages/+model/model.module#ModelModule',
            outlet: 'models-content'
          }
        ]
    
      }
    ];
    

    您想在 admin-area-models 内呈现您的辅助路线,在那里您有您的 <router-outlet name="models-content">,但这就是您声明路线的方式:

    这就是你想要渲染它们的方式:

    你显然需要改变你的逻辑,因为你的路线不是兄弟姐妹他们是admin-area-models的孩子

    【讨论】:

    • 这不再让我访问'' 路由,或任何低于此的路由。
    • 您能详细说明一下吗?
    • 那是因为现在你的路线是这样的:/admin/dashboard/models/brands, /admin/dashboard/models/models, /admin/dashboard/models/models/5
    • 但是它们是辅助路线,所以它们不是:|
    • 那么您需要重新考虑您的逻辑,因为您将它们声明为您的models 的兄弟姐妹,但是您希望它们成为models 的孩子,这就是为什么它们与您一起呈现的原因父组件
    猜你喜欢
    • 2018-07-28
    • 2016-12-30
    • 2017-03-04
    • 2017-04-29
    • 2021-03-13
    • 2017-02-15
    • 2020-05-16
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多