Angular延迟加载模块和共享模型类

时间:2017-11-04 18:27:05

标签: angular lazy-loading datamodel

在我的应用程序中,我有很多简单的数据模型类。例如

export class Client {
   first_name: string;
   last_name: string;
   fullName(): string {
       return `${this.first_name} ${this.last_name}`;
   }
}

请注意,这不是ClientService提供程序类。这些是整个应用程序中使用的核心模型类。现在我想实现延迟加载的ng模块。 Angular docs描述了如何共享组件,提供者,指令和管道。然而,注意到简单(非注释)类。 Heros示例有an exported model class但不在其模块之外使用。

我猜根模块应该导入所有模型类。然后,要素模块应仅导入模型类声明。加载所有模块后,应该有一个fullName()方法定义。这是否意味着我应该为模型类定义一个模块?是否可以对未注释的类执行此操作?

更新:我检查了dist目录中的文件。事实证明,Client类方法并未包含在延迟加载的模块(* .chunk.js)中。但这是如何工作的? Angular / Webpack如何知道应该将哪些类打包到main.bundle.js中以及哪些类打包到chunk.js文件中?

1 个答案:

答案 0 :(得分:2)

Webpack执行全局应用程序源代码分析,并保留register引用哪个类。如果仅从a lazy loaded module引用类,则将其打包到延迟加载的模块(* .chunk.js)中。

从主模块引用的公共类被打包到主包中。因此,在延迟加载的模块中不存在它们,它们应该由主包加载。

NgModules(主要和延迟加载)被视为依赖图的应用程序入口点。模型类不能被视为应用程序入口点,因此不需要对它们进行注释(不需要其他信息)。 Webpack将完成解决依赖关系的所有肮脏工作。