首页 文章

Angular 6服务:providedIn:'root' vs CoreModule

提问于
浏览
17

使用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 回答

  • 2

    如果CoreModule仅包含服务,那将是真的 . 但是,它确实包含其他内容,例如一次性组件 .

    来自Angular Docs:

    在CoreModule中收集应用程序范围的一次性组件 . 应用程序启动时将其导入一次(在AppModule中),并且永远不会将其导入其他任何位置 . (例如NavComponent和SpinnerComponent) .

  • 0

    拦截器和守卫呢?我想这可以是全球性的 . 我同意你对CoreModule没有声明和纯粹服务的考虑,但我认为Guards和Interceptors也应该考虑周到 .

  • 1

    我仍然会将CoreModule保留为单用组件和Http拦截器, providedIn 属性现在是注册单例服务的推荐方法,为了清楚起见,我将把所有单例服务放在core / services目录下

相关问题