繁体   English   中英

如果在 2 个延迟加载模块中使用了 Angular 服务,则为providedIn 设置什么

[英]What to set for providedIn, if Angular service is used in 2 lazy loaded modules

由于 Angular 6 推荐的方法是使用Injectable providedIn属性。

但是如果需要在 2 个延迟加载模块中使用服务怎么办?
创建共享模块然后在两个延迟加载的模块中导入共享模块是否仍然认为是最佳实践?

像这样的东西(按照链接以避免循环引用警告):

//Shared module
@NgModule({})
export class SharedModule { }

//Shared service
@Injectable({
  providedIn: SharedModule
})
export class SharedService { }


//Lazy loaded modules A and B
@NgModule({
  imports: [SharedModule]
})
export class LazyModuleA { }

@NgModule({
  imports: [SharedModule]
})
export class LazyModuleB { }

根据第一个答案进行编辑:会有相当(40-80)的服务。

我不认为这是一个好主意。因为你在注入器中注入一个服务来应对可能发生或可能不会发生的情况。当你在 ShareModule 中注入这个服务时,这个服务一直存在,直到你的应用程序还活着。让我们想象一个情况你有很多这样的场景,你在注入器中注入了大量消耗内存的服务。 我认为最好在 lazyLoad 模块级别注入此服务。

这是我在 Angular 6(及更高版本)中观察到的服务

您可以安全地使用“providedIn:'root'”

唯一的问题是请不要将它添加到 app.module (或您拥有的任何入口模块)的导入中。 如果添加它,它将立即加载。

否则,如果您使用 "providedIn: 'root'" 并且它在任意数量的模块中使用,则在使用该服务的任何模块加载之前它不会加载。

加载后,它在使用它的模块之间共享相同的引用。

示例说明:

服务 A(以 root 身份提供)

应用模块

懒惰模块1(不使用服务A)

懒惰模块2(使用服务A)

懒惰模块3(不使用A)

懒惰模块4(使用A)

服务 A 将在加载 lazy-module-2 或 lazy-module-4 时加载。 加载后,它会留在应用程序中

如果您想要一个演示应用程序,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM