延迟加载模块中的角度延迟加载模块

Posted

技术标签:

【中文标题】延迟加载模块中的角度延迟加载模块【英文标题】:angular lazy load module in lazy loaded module 【发布时间】:2018-05-22 10:22:46 【问题描述】:

我可以在延迟加载模块中延迟加载模块吗? 我有这样的“出版物”路线模块,但它加载了太多功能来编辑这个出版物,而用户可能没有这个权限。所以我尝试以某种方式对其进行优化,因为我有类似的组件,根据权限“编辑/添加”。 如果您有关于以某种方式优化权限的建议,我们会很高兴。

更新 是的你可以。只需在延迟加载的模块中导入其他模块以进行路由

【问题讨论】:

我认为使用堆叠的 LazyLoaded 模块应该开箱即用。您只需要将它们实现为普通的 LazyLoaded 模块。但它是很久以前我用过的,所以我不是 100% 确定 【参考方案1】:

FpgTimeComponent 不是将要加载的惰性模块文件的一部分,所以你不能这样做。想一想,您正在尝试在惰性模块中导入一个组件,该模块对此一无所知,因为它没有在该模块中定义,也没有在您在LazyModule 中导入的任何其他模块中定义。那么它从哪里获取组件呢?

FpgTimeComponent 添加到SharedModule 并将SharedModule 导入您的LazyModule,或将FpgTimeComponent 移动到您的LazyModule。一旦你做了其中之一,它应该就可以工作了。

无论如何,这是一种更好的方法,因为我可以保证,随着您继续开发,您将继续遇到与其他组件/其他惰性模块相同的错误。如果你在多个地方使用组件,那么它们应该像Angular best practices defines一样存在于SharedModule中,并且应该在所有惰性模块中导入SharedModule

这是一个例子。

共享模块:

import  FpgTimeComponent  from './some/path';

@NgModule(
    declarations: [
        FpgTimeComponent
    ],
    exports: [
        FpgTimeComponent
    ]
)

LazyModule:

import  SharedModule  from '../shared/shared.module';

import  LazyComponent    from './lazy.component';
import  routing  from './lazy.routing';

@NgModule(
    imports: [
        routing,
        SharedModule
    ],
    declarations: [
        LazyComponent
    ]
)

【讨论】:

以上是关于延迟加载模块中的角度延迟加载模块的主要内容,如果未能解决你的问题,请参考以下文章

延迟加载模块中的 Angular single-spa 延迟加载路由调用未定义的 webpack 错误

角度 5 延迟加载与动态加载

Angular 2 延迟加载技术

如何从 NgbModal 中的延迟加载模块中打开组件?

符号延迟加载

符号延迟加载