Angular 构造函数中的服务与组件中作为提供者列出的服务之间的区别?

Angular 构造函数中的服务与组件中作为提供者列出的服务之间的区别?,angular,typescript,Angular,Typescript,如果在组件中我将服务声明为: 供应商: @Component({ ... providers: [MyService]}) 在构造函数中: constructor(private myService: MyService) { ... } 是否有首选方法?当您在组件级别注册提供者时,您会在该组件的每个新实例中获得一个新的服务实例 当您在根级别提供服务时,Angular会创建一个单独的共享MyService实例,并将其注入任何请求它的类中 在@Injectable()元数据中注

如果在组件中我将服务声明为:

供应商:

@Component({
  ...
  providers: [MyService]})
在构造函数中:

constructor(private myService: MyService) {
    ...
}

是否有首选方法?

当您在组件级别注册提供者时,您会在该组件的每个新实例中获得一个新的服务实例

当您在根级别提供服务时,Angular会创建一个单独的共享MyService实例,并将其注入任何请求它的类中

在@Injectable()元数据中注册提供程序还允许Angular通过从编译的应用程序中删除服务(如果未使用)来优化应用程序

@Injectable({ providedIn: 'root' })

当您在组件级别注册一个提供程序时,您会在该组件的每个新实例中获得一个新的服务实例

当您在根级别提供服务时,Angular会创建一个单独的共享MyService实例,并将其注入任何请求它的类中

在@Injectable()元数据中注册提供程序还允许Angular通过从编译的应用程序中删除服务(如果未使用)来优化应用程序

@Injectable({ providedIn: 'root' })