对于 Angular 6,以下是创建单例服务的首选方法:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class UserService {
}
来自角度文档:
当您在根级别提供服务时,Angular 会创建 HeroService 的单个共享实例,并将其注入任何需要它的类中。在 @Injectable 元数据中注册提供程序还允许 Angular 通过删除该服务来优化应用程序(如果最终没有使用该服务)。
Also,
providers: [
// no need to place any providers due to the `providedIn` flag...
]
那么,这是否意味着我们不再需要核心模块 https://angular.io/guide/styleguide#core-feature-module?我们可以将服务和其他常用模块直接导入到AppModule中。
好吧,我认为它是创建 CoreModule 的替代方案,文档明确指出:
在 Angular 中,有两种方法可以使服务成为单例:
声明 @Injectable()providIn 属性的值的根
将服务包含在 AppModule 或仅由 AppModule 导入的模块中
我在这里找到了这个单例服务文档 https://angular.io/guide/singleton-services
如果您的应用程序有一个纯服务的 CoreModule,您可以简单地摆脱它(当然,如果您认为没有必要),尽管我不推荐它,但对我来说,我认为拥有一个 CoreModule 更容易维护,因为我可以轻松地在项目中找到它,并告诉我哪些服务对于应用程序来说是基础服务,我们只需要其中的一个实例,而不必在 IDE 中打开搜索对话框并查找具有该服务的所有服务providedIn: 'root'
setted.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)