使用Angular 6,下面是创建单例服务的首选方法:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class UserService {
}
来自Angular doc:当您在根级别提供服务时,Angular会创建一个HeroService的单个共享实例,并注入任何要求它的类 . 在@Injectable元数据中注册提供程序还允许Angular通过删除服务来优化应用程序(如果事实证明它不会被使用) .
也,
providers: [
// no need to place any providers due to the `providedIn` flag...
]
那么,这是否意味着我们不再需要CoreModule?我们可以将服务和其他常用模块直接导入AppModule .
3 回答
如果CoreModule仅包含服务,那将是真的 . 但是,它确实包含其他内容,例如一次性组件 .
来自Angular Docs:
拦截器和守卫呢?我想这可以是全球性的 . 我同意你对CoreModule没有声明和纯粹服务的考虑,但我认为Guards和Interceptors也应该考虑周到 .
我仍然会将CoreModule保留为单用组件和Http拦截器,
providedIn
属性现在是注册单例服务的推荐方法,为了清楚起见,我将把所有单例服务放在core / services目录下