4

在使用 AngularJS 1.x 框架开发 2 年后,我目前正在学习 Angular 框架(第 5 版),所以我问了自己很多问题,其中一个是正确导入由另一个模块提供的服务的方法我的申请。

假设我有一个CoreModule提供MyService服务的示例,假设该项目具有以下文件树:

app/
   app.module.ts
   ...
pages/
   clients/
      clients.component.html
      clients.component.css
      clients.component.ts
   ...
core/
   core.module.ts
   providers/
      my-service.service.ts

现在假设我的clients页面需要从模块中注入MyService服务。CoreModule为此,我将放入模块MyService的提供者列表中CoreModule。我将CoreModule在我的AppModule.

如果我很好理解,通过进行这样的导入,我会告诉我的应用程序MyService在模块的 .ts 文件中需要它时使用该服务AppModule

但我无法理解的是在我的应用程序代码中包含声明服务的 .ts 文件。事实上,如果我想使用该MyService服务,我会在Clients课堂上做类似的事情:

constructor(private service: MyService) {
   // using of the injected service
}

但是 TypeScript 需要引用声明服务的 .ts 文件。我的第一次尝试是按照文件树导入文件:

import { MyService } from '../../core/providers/my-service.service';

但这对我来说感觉不对,因为当我导入 Angular 服务时,我不必指定访问声明相关服务的文件的路径。服务示例HttpClient

import { HttpClient } from '@angular/common/http';

实际上,我希望能够通过引用模块而不是传递 .ts 文件的路径来在我的应用程序页面中导入我的核心服务。

那时,我什至不知道这是否可能,或者我是否误解了其他模块中服务的使用。

4

1 回答 1

1

当你这样做时

constructor(private service: MyService) {
   // using of the injected service
}

您正在将依赖项注入此类。这意味着,Angular 将创建一个MyService类的实例,并在创建时将其传递给组件的构造函数。

当你这样做时

import { MyService } from '../../core/providers/my-service.service';

这只是说明 TypeScript 存在这样的类,您指的是哪个类,并且还允许 TypeScript 正确执行类型检查。它只不过是指向确切MyService类位置的指针,因为您可能在不同的文件中有多个具有此类名称的类。

我不会说那HttpClient是一项服务,只是一个普通的班级助手。

因此,所有工作仍然在构造函数声明级别完成。这适用于 Angular 和依赖注入。额外的导入主要用于 TypeScript。

于 2017-11-28T04:32:55.053 回答