Angular 2定义了多个模块的数据模型

A. *_*ler 15 directory-structure datamodel typescript angular2-modules angular

我目前正在使用Angular 2.0(发布版本)开始一个新项目,我想定义一些全局数据模型/模式.据我了解,Angular 2没有处理纯数据类的默认方式,如下所示:

export class TestModel {
  id: number;
  name: string;
  randomAttribute: number;
  author: string;
}
Run Code Online (Sandbox Code Playgroud)

所以关于最佳实践的第一个问题是:在使用Angular 2时我应该定义这样的类吗?

对于我整个应用程序的设计和概念,我认为它们是必要的,但我不确定我是否在这里应用了错误的思维方式.

多个模块(ngModule)有时需要这些数据类,所以我的第二个问题是我将它放在我的应用程序中的哪个位置?目前我有以下结构:

/app
   /shared
      shared.module.ts
      test.model.ts
   /module1
      module1.module.ts
      foo.component.ts
      [...]
   /module2
      module2.module.ts
      bar.component.ts
      [...]
   app.module.ts
   [...]
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是将其包含instruction.model.tsshared.module导入的每个模块中并将其导出shared.module.这似乎不起作用,因为该模型不是指令,管道或模块.有没有办法出口呢?

更简单的解决方案是直接test.model.ts在需要它的每个模块中导入文件和每个其他共享模型.但这对于多个模型来说似乎很笨重而且不方便.

我想到的第三种可能的解决方案是将所有共享数据模型放在一个单独的文件夹中,将它们的导出捆绑在一个文件中,如下所示,并在需要它的每个模块中导入该文件.

A. *_*ler 25

所以,一个月后,我有信心自己回答这个问题并分享我用来解决上述问题的方法.其中大部分源于我对Typescript和Angular2的进口和出口的误解或仅仅是设计决策.

TL; DR:是的,模型类可能会有所帮助.放置它们取决于您的应用程序和您的偏好,但导入的绝对路径有帮助.问题中的其他所有内容并不重要.

所以关于最佳实践的第一个问题是:在使用Angular 2时我应该定义这样的类吗?

在我采用Angular2之前,我没有使用AngularJS或任何JavaScript框架,而是习惯了像Laravel这样的PHP框架的经典MVC模式.所以这就是这个问题的来源.答案对我来说是肯定的,你应该.类型是Typescript的一大优势,定义数据模型类或类型有助于保持应用程序的一致性,在我的IDE中提供自动完成功能,打字稿编译器可以在我陷入困境时通知我.此外,这些类强制与后端的关系数据库保持一致.这些模型类仍然是可选的,是否使用它们是一个设计决定,甚至可以被认为是个人意见.

我的第二个问题是我将它们放在我的应用程序中?

就像@ Sam5487在他的回答中指出的那样,这些类只是变量或对象,就像JavaScript中的几乎所有东西一样.因此,要导入它们,您需要使它们可以全局访问,并且只需import {SomeDumbModel} from '../../../modelfolder'在应用程序中的某个位置导入它们.当然,这适用于应用程序中的任何位置,但这些相对路径可以变得非常长而且笨重.所以真正的问题应该是:我可以使用绝对路径进口吗?.答案是肯定的,至少使用angular-cli,webpack和打字稿.我不知道SystemJS或其他设置的解决方案.我去了/models我的应用程序根目录下的文件夹,可以@models/在任何地方导入时引用我的文件夹.

我的第一个想法是在shared.module中包含instruction.model.ts并将其导出到导入shared.module的每个模块中.这似乎不起作用,因为该模型不是指令,管道或模块.有没有办法出口呢?

问题的其余部分是基于我对Typescript和Angular2中的进口和出口的误解.所有关于模块和导出它的东西在这里并不重要,对于完全不同的问题很重要.其他一切都应该现在回答.