gpt4 book ai didi

Angular 6 - 创建(非根)模块范围服务

转载 作者:行者123 更新时间:2023-12-03 23:54:52 26 4
gpt4 key购买 nike

据我所知,直到 angular 6 ,所有@Ngmodule 提供程序都在根注入(inject)器上注册并在主包中提供服务,即使只有延迟加载的模块使用它们。

唯一的异常(exception)是如果我们想要 create a non singleton services in a component level .

我想创建一个单例服务,该服务仅对特定模块(而不是根模块)可见,因此不会在主热切加载的包中提供服务。

看到在 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/

https://www.youtube.com/watch?v=Xr5l7lT--YU

最佳答案

如果我们根据 official docs 遵循此设置,似乎存在一些关于循环依赖的问题。 :

import { Injectable } from '@angular/core';
import { HeroModule } from './hero.module';
import { HEROES } from './mock-heroes';

@Injectable({
// we declare that this service should be created
// by any injector that includes HeroModule.

providedIn: HeroModule,
})
export class HeroService {
getHeroes() { return HEROES; }
}

您可以忽略编译器由于模块、服务和组件之间的循环依赖而引发的警告。或者,回退到 Angular 5 中使用的先前方法。

将服务注册为延迟加载模块中的提供者,请注意,您不应在根应用程序模块中导入延迟加载模块:
@NgModule({
imports: [
RouterModule.forChild([{ path: '', component: LazyComponent }]),
],
declarations: [
LazyComponent
],
providers: [YourServiceHere]
})
export class LazyLoadedModule { }

关于Angular 6 - 创建(非根)模块范围服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50249404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com