当前位置: 首页 > 知识库问答 >
问题:

延迟加载模块上的角度子路由未加载

平学
2023-03-14

不确定我是否做对了一切。但问题是:当我从延迟加载的模块导航到组件的某些子路由时,它根本不加载。它从延迟加载模块重新加载主组件。

app-routing.component.ts

const routes: Routes = [
  {path: 'intel', loadChildren: () => import(`./intel/intel.module`).then(m => m.IntelModule)},
  {
    path: 'planet-detector',
    loadChildren: () => import('./planet-detector/planet-detector.module').then((m) => m.PlanetDetectorModule)
  },
  {path: '', redirectTo: 'space', pathMatch: 'full'},
  {path: '**', component: BlackHoleComponent}
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

planet-detector-routeting.module.ts

const routes: Routes = [
  {path: '', component: DetectorComponent, children: [
      { path: 'first', component: FirstChildComponent},
      { path: 'second', component: SecondChildComponent}
    ]}
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class PlanetDetectorRoutingModule { }

所以在上面的例子中,当你输入“http://localhost:4200/planet-detector/first”时,它会加载DetectorComponent组件,而不是FirstChildComponent (url指向“http://localhost:4200/planet-detector/first”)。

我注意到,当我将PlanetDetectorRoutingModule更改为:

const routes: Routes = [
  { path: '', component: DetectorComponent },
  { path: 'first', component: FirstChildComponent },
  { path: 'second', component: SecondChildComponent }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class PlanetDetectorRoutingModule { }

那么它工作得很好。还有一个问题。这些孩子路线分离有什么好处?

共有1个答案

梁渊
2023-03-14

当路由在children属性中声明时,这意味着它们应该被呈现为该组件的子级。

因此,要渲染该路由,需要有一个

在子项中列出的路由遵循以下规则:

路由器处理这些子路由的方式有很大的不同。

路由器在ParentComponent的route route let中显示这些路由的组件,而不是在AppComponent shell的route route let中显示。

 类似资料:
  • 为了显示这种关系,让我们开始定义一个简单的模块,作为我们的示例应用程序的根模块。 app/app.module.ts 到目前为止,这是一个非常常见的模块,依赖于,有一个路由机制和两个组件:AppComponent和EagerComponent。 现在,让我们专注于定义导航的应用程序(AppComponent)的根组件。 app/app.component.ts import { Component

  • 问题内容: 我试图在UI-Router router.js文件中延迟加载控制器和模板,但是在模板处理上遇到困难。 控制器已正确加载,但是在加载之后,我们必须加载模板,这就是问题所在。 ocLazyLoad加载控制器后,我们解析了一个Angular Promise,它也包含在templateProvider中。问题在于,在文件加载完成后,不是返回诺言(templateDeferred.promise

  • 我试图实现延迟加载,但得到如下错误** 错误错误:未捕获(在promise中):错误:BrowserModule已加载。如果您需要从一个延迟加载的模块中访问一些公共指令,比如NgIf和NgFor,那么可以导入CommonModule。 ** 需要帮助这是我的模块 共享模块 2.设置模块 5.AppModule

  • 问题内容: 感谢Dan Wahlin的精彩文章,我设法实现了Angular的控制器和服务的延迟加载。但是,似乎没有一种干净的方法来懒惰加载独立的模块。 为了更好地解释我的问题,假设我有一个没有RequireJS的应用,其结构如下: 这是在Plunker中带有RequireJS的示例应用程序:http ://plnkr.co/aiarzVpMJchYPjFRrkwn 问题的核心是Angular不允许

  • 尽管我对Angular比较陌生,但它应该是如此简单以至于让我发疯。我使用带有“使用角度路由”选项的CLI创建了一个角度项目。创建了一个功能模块,并使用VS代码中的支架插件(Alexander Ivanichev的“Angular Files”)为其添加了一个路由类。一开始,我只是直接在app.component.html中添加组件选择器,它工作得很好,当我添加了路由器出口,将所有东西连在一起,并将

  • 我需要在基于url的懒惰模块中加载详细信息。所以,我使用了懒惰的辅助路由。但是,当我使用辅助路由时,我面临以下问题。 错误错误:未捕获(promise中):错误:无法匹配任何路线。URL段:“lazy/aux1”错误:无法匹配任何路由。URL段:ApplyRedirects.noMatchError处的“lazy/aux 1”(https://lazy-load-auxiliary-b7vpg-e