Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 为什么我在两个模块中注入服务是单例模式?_Angular_Typescript_Dependency Injection_Service_Angular Module - Fatal编程技术网

Angular 为什么我在两个模块中注入服务是单例模式?

Angular 为什么我在两个模块中注入服务是单例模式?,angular,typescript,dependency-injection,service,angular-module,Angular,Typescript,Dependency Injection,Service,Angular Module,下面是文件的情况 AppService AppModule AModule AComponent BModule BComponent 关于服务,我知道如果我在两个组件中注入服务,angular将生成两个不同的服务对象,服务数据无法共享。如果我在AppModulenamedSingleton模式中注入service,该服务将共享数据 但是,如果在Amodule和BModule中插入Service,该怎么办?我认为结果与注入组件相同。但事实是单例模

下面是文件的情况

AppService
AppModule
    AModule
        AComponent
    BModule
        BComponent
关于
服务
,我知道如果我在两个组件中注入
服务
,angular将生成两个不同的服务对象,服务数据无法共享。如果我在
AppModule
named
Singleton模式中注入
service
,该服务将共享数据

但是,如果在
Amodule
BModule
中插入
Service
,该怎么办?我认为结果与注入组件相同。但事实是
单例模式

为什么??
服务
被注入到两个不同的模块中,我想angular应该在两个模块中生成两个服务对象。谁能帮我解决这个问题?谢谢

StackBlitz链接是


我创建了一个演示,它将输出随机数,以检查服务是否为
单例模式

当您在模块中提供服务并再次导入时,整个应用程序都可以使用该服务。您可以通过注释moduleB中的
提供者=[AppService]
来验证这一点,并看到与前面相同的结果

在每个单独的组件中提供服务,然后您可以看到一个新的服务实例被注入,如中所示


根据评论,如果你不想在你的应用中注入单例服务,你可以完全省略DI,并在每个组件中创建一个新的服务实例

constructor() { this.random = new AppService().random; }

如果我不使用lazy模块,我希望ModuleA和ModuleB中存在
单例模式
。我该怎么办?对不起,我没听清你的问题。在我的stackblitz演示中,如果我在ModuleA和ModuleB中注入服务,服务模式是单例的。如何使moduleA和ModuleB成为非单例。我不想注入组件,因为可能moduleA有很多组件,但是moduleA的组件应该共享服务的数据。一种选择是在组件级别注入服务,这是首选的方式。但是,由于您不想这样使用它,您可以在两个组件的构造函数中手动创建一个新实例,即
constructor(){this.random=new-AppService().random;}