非单身人士服务

时间:2017-04-07 16:00:37

标签: angular

我有一个文件上传组件,我在一个视图中多次使用。我有一个服务来管理每个上传文件的元数据。当我将文件添加到一个组件时,所有组件都开始更新,而不仅仅是添加了文件的组件。

是否有办法为正在显示的每个组件附加一个新的服务实例?

2 个答案:

答案 0 :(得分:9)

根据the docs

  

在组件级别提供服务可确保组件的每个实例都获得自己的私有服务实例。

因此,不要将服务列在应用程序模块的providers中,而是尝试将其列在较低级别的组件定义中。

答案 1 :(得分:0)

您只需要在相关组件中提供服务,然后该服务仅可用于该特定组件及其子组件。如果您在模块中使用了该服务,则该服务在应用程序的根目录下可用。

@Component({
  selector: 'app-villains-list',
  templateUrl: './villains-list.component.html',
  providers: [ VillainsService ]
})

通过在VillainsListComponent元数据中提供VillainsService,仅在VillainsListComponent及其子组件树中提供该服务。 VillainService相对于VillainsListComponent是单例,因为它是在此处声明的。只要VillainsListComponent不被销毁,它将是VillainService的相同实例,但是如果有VillainsListComponent的多个实例,则VillainsListComponent的每个实例将具有其自己的VillainService实例。

https://angular.io/guide/hierarchical-dependency-injection