【问题标题】:Angular 8 - How to override BrowserModule for multi-apps lazy loading?Angular 8 - 如何覆盖 BrowserModule 以实现多应用延迟加载?
【发布时间】:2019-09-04 17:26:49
【问题描述】:

在成功测试了子应用路由后,我从其父应用调用了同一个子应用,但这次路由不起作用并显示以下控制台错误:

错误:BrowserModule 已加载。如果您需要访问 来自延迟加载模块的常见指令,例如 NgIf 和 NgFor, 改为导入 CommonModule。

使用下面的代码,我试图用应该导出到父应用程序的 CommonModule 覆盖子应用程序 BrowserModule,因为 BrowserModule 应该只使用一次,实际上,它已经被父应用程序使用 app.module.ts .所以我的子appapp.module.ts如下:

    const routes: Routes = [
      {
        path: 'module1',
        loadChildren: () => import('../../../sub-app1/src/app/module1/module1.module').then( module => module.Module1Module )
      },
      {
        path: 'module2',
        loadChildren: () => import('../../../sub-app1/src/app/module2/module2.module').then( module => module.Module2Module )
      }
    ];

    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule,
        RouterModule.forRoot(routes)
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }

    @NgModule({
      imports: [
        AppModule,
        CommonModule,
        RouterModule.forChild(routes),
      ]
    })
    export class SubApp1Module {}

那么可以做些什么来让父应用程序的路由工作?

【问题讨论】:

    标签: angular angular2-routing lazy-loading


    【解决方案1】:

    您不应该从 SubApp1Module 导入 AppModule。

    • 删除“AppModule”导入,您应该就可以了。
    • 如果您想与其他模块共享 AppModule 中的某些内容,请创建一个“SharedModule”并导入该模块。

    【讨论】:

    • 我尝试过“SharedModule”的方法,但对我不起作用,我收到如下错误消息:AppComponent is used in AppModule and SharedModule, try to move AppComponent到更高级别的模块,看起来提到的方法只适用于子应用程序使用组件路由,而不是模块。这是我尝试过的方法:github.com/kievsash/Core-App-monorepo/blob/master/projects/app1/…
    • 我可以保证你不应该在任何子模块中导入 AppModule。曾经。如果您在使用 SharedModules 时遇到问题,您可以暂时跳过该部分,至少让您的应用程序运行起来。暂时的缺点是必须一直在每个模块中重新导入相同的服务。
    • 我的应用程序正在运行,没有任何编译错误,只是由于某种原因路由不起作用,并且我得到与 BrowserModule 相关的浏览器控制台错误,这是另一个将 AppModule 导入导出子的示例-模块:github.com/hql287/angular-sub-apps-setup/blob/master/projects/…
    • @Sami-L 在您的示例中,我没有看到 AppModule 被导入另一个模块。
    • App1SharedModule 正在返回 AppModule 并且 App1SharedModule 被导入到主 app.module.ts(父应用程序)中。
    猜你喜欢
    • 2018-02-09
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多