angular - 以 Angular 6+ 向指定模块注入(inject)服务

标签 angular typescript dependency-injection

当使用 angular-cli 创建新服务时,该服务将使用 @Injectable 装饰器在根级别注入(inject)。

@Injectable({
  providedIn: 'root',
})
export class HeroService {
  constructor() { }
}

但我不想要根级别的服务,我只想在指定的模块中使用它。 在 ng6 之前,这可以通过将 he serves only 添加到指定模块的 providers 数组中来实现。 这在 ng6+ 中仍然是正确的方法吗

最佳答案

服务被注入(inject)到组件、指令、服务等的构造函数中,它们在根、模块或组件级别提供。没有在模块级别注入(inject)服务的概念。您可以在模块级别提供服务,这意味着该服务的同一个实例将被注入(inject)到请求该服务的模块的所有项目中。如果您的服务仅在单个模块中使用,那么在根或模块级别提供它根本没有区别,最终结果是所有注入(inject)请求都获得相同的实例。

只在根级别提供所有服务而不用担心它们使用的位置是很好的。唯一需要在根目录之外提供服务的情况是,当您希望在不同位置提供唯一的服务实例时。只是说组件层次结构与共享服务共享数据并且您不希望该数据在组件外部可用然后您让最顶层的组件提供服务然后该组件的所有子组件将获得相同的实例但另一个父组件的实例将拥有它自己的唯一实例。

在 root 中引入 provided 后,在模块级别提供组件并不是真正必要的。

关于angular - 以 Angular 6+ 向指定模块注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58055949/

相关文章:

angular - 在异步中使用 promise 时捕获 HTML5 FileReader 的结果

http - 使用模拟后端测试 Angular2 服务

java - Dagger 2 注入(inject)没有模块的单例

events - 如何调试 symfony2 服务容器中配置的标签和服务?

node.js - `npm install` 返回错误

运行 ng 测试时,angular 2 "Failed: Cannot read property ' 替换“未定义”

javascript - Angular 5 : setting (click) value from an object not working

所有子控件的 Angular 形式 updateValueAndValidity

c# - 找不到 Angular 2 路由资源

javascript - fat-arrow 函数返回的剩余运算符