【问题标题】:Angular: nested router-outlet is always ignoredAngular:嵌套的路由器插座总是被忽略
【发布时间】:2018-11-24 09:39:29
【问题描述】:

如果我的第二个路由器插座总是被忽略,你知道我的配置可能有什么问题吗?这是我的 app.module 路由(app.component 有一个路由器出口):

const routes: Routes = [
  {
    path: 'home',
    loadChildren: './home/home.module#HomeModule',
    canLoad: [AuthorizationGuard]
  },
  {
    path: 'please-login',
    component: PleaseLoginComponent
  },
  {
    path: '**',
    redirectTo: 'please-login'
  }
];

这是我的 home.module-routing(HomeComponent 有另一个路由器出口):

RouterModule.forChild([
  {
    path: '',
    pathMatch: 'full',
    component: HomeComponent,
    children: [
      {
        path: 'welcome',
        component: WelcomeComponent
      }
    ]
  },
  {
    path: '**',
    redirectTo: 'welcome'
  },
  {
    path: 'Data',
    loadChildren: '@libs/data#DataModule'
  }
]),

我可以毫无问题地加载 DataModule;它引导我到 /home/data/blabla。但是(!)它将 DataComponent 插入到第一个路由器插座中。第二个(因此应该围绕 DataComponent 的整个 HomeComponent)被忽略。也就是说,除非我导航到 /home,否则它会显示,但正如预期的那样,里面没有 DataComponent。这意味着我只能以独占方式使用这两个组件,而不能嵌套使用。

我尝试使用命名插座,但没有成功。当我跟踪记录路由器状态时,解析似乎没问题,所以我有点迷失在这里

【问题讨论】:

  • home 组件中的 router-outlet 是匹配子路由的组件将被插入的地方。您的主路线有一个子路线“欢迎”。所以如果你去 /home/welcome,WelcomeComponent 将被插入那里。对于任何其他路由,您不会在默认主路由的子路由中,因此不会插入任何内容。
  • @JBNizet 谢谢,我已经相应地调整了我的代码(我认为你和 SiddAjmera 的想法相同)。但我仍然收到此配置的错误(请参阅我对答案的评论)。你知道为什么吗?
  • @Phil,从 JBNizet 获得了很大的收获,我更新了我的答案。这应该可以解决问题。

标签: angular angular-routing


【解决方案1】:

要在 HomeComponent 的 router-outlet 中加载 DataComponent(这意味着您还必须将 <router-outlet></router-outlet> 添加到您的 HomeComponent 模板中),您必须将 data 设置为'' 路径的子节点。

您必须做的另一件事是从您的 '' 路由中删除 pathMatch: 'full'。它会做的是,尝试以块的形式匹配路径,即如果匹配'',它将尝试检查任何匹配的子路由。

最后,我不确定是不是拼写错误,但路径应该是data 而不是Data

所有这些都将转化为类似这样的代码:

RouterModule.forChild([
  {
    path: '',
    component: HomeComponent,
    children: [
      {
        path: 'data',
        loadChildren: '@libs/data#DataModule'
      },
      {
        path: 'welcome',
        component: WelcomeComponent
      },
      {
        path: '**',
        redirectTo: '/welcome',
        pathMatch: 'full'
      }
    ]
  },
  ...
]),

【讨论】:

  • 非常感谢。但不幸的是,在使用此配置从登录(/登录)重定向后,我得到了Error: Cannot match any routes. URL Segment: 'home/welcome'。你知道为什么吗?
  • 删除你的基本路线的 pathMatch: 'full'。
  • @JBNizet,啊哈。接得好。谢谢:)
  • 非常感谢大家!它可以在没有 patchMatch: 'full' 的情况下工作!
猜你喜欢
  • 2018-08-18
  • 2020-05-16
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 2020-03-16
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多