据我所知,直到 angular 6 ,所有@Ngmodule 提供程序都在根注入器上注册并在主包中提供服务,即使只有延迟加载的模块使用它们。
唯一的例外是如果我们想在组件级别创建非单例服务。
我想创建一个单例服务,该服务仅对特定模块(而不是根模块)可见,因此不会在主热切加载的包中提供服务。
看到在 Angular 6 中,模块将不再需要通过 "providers" 来引用服务,而是服务现在将引用模块。
这可以通过@Injectable
注解和provideIn
属性来完成。
我没有找到一个很好且清晰的示例来说明如何添加不是“root”的模块名称,如下所示:
@Injectable({ provideIn: <MyLocalModule>})
export class SimpleServiceForLocalUseOnly { […] }
在上面的代码片段中导入 LazyLoaded 模块并将其写为“MyLocalModule”会导致循环依赖的警告。我可以通过将服务移动到其他模块来解决这个问题,但是我失去了最初的目的。
检索参考列表:
https://blog.angular.io/version-6-of-angular-now-available-cc56b0efa7a4
https://jaxenter.com/new-angular6-143995.html
https://www.ngdevelop.tech/angular-6-features/
https://blog.ninja-squad.com/2018/05/04/what-is-new-angular-6/
http://ankitsharmablogs.com/getting-started-with-angular-6-0/