覆盖Angular 6中提供的注入令牌无效

时间:2019-03-07 11:16:44

标签: angular typescript angular-module angular-providers angular-dependency-injection

我正在尝试构建一个NavigationModule,该模块可以在每个导航模块实例具有不同导航对象的延迟加载模块上使用。我创建了这样的注入令牌,并尝试在模块中使用它:

export const NAVIGATION: InjectionToken<INavigationSettings> = new InjectionToken<INavigationSettings>('Navigation to display');
export class NavigationModule {
  static withNavigation(navigation: INavigationSettings): ModuleWithProviders {
    return {
      ngModule: NavigationModule,
      providers: [
        { provide: NAVIGATION, useValue: { value: navigation } }
      ],
    }
  }
}

问题是,每当我尝试像这样在延迟加载的模块中覆盖所提供的注入令牌时,它都不会对服务中的值产生双向绑定影响。

我这样导入NavigationModule:

@NgModule({
  imports: [   
    NavigationModule.withNavigation(developerNavigation),
    ...
  ]
})
export class DeveloperModule { }

我想将指定的导航注入服务中以进行进一步处理,但是并不能使服务与最新的指定导航保持最新(在我的情况下,该服务是单例并且使用{{1} }):

providedIn: 'root'

我想念什么吗?我如何做到这一点,以便该服务使注入的NavigationList保持最新状态,并在以后导入延迟加载的模块?这是我第一次使用InjectionTokens,碰巧我需要在一个延迟加载的模块中使用它,这对我来说很棘手。

其他详细信息:

  • 从服务中删除export class NavigationService { constructor(@Optional() @Inject(NAVIGATION) public navigationList: INavigationSettings | null) { } } 装饰器可以使我 错误@Optional()

  • 我尝试在NavigationModule中提供NavigationService 相反,但这并非没有奇怪的行为。的 来自不同延迟加载的导航通过,但是 看起来服务被实例化了多次。我试着 避免使用NavigationService的多个实例。

  • 我尝试将令牌注入组件而不是服务中,并且 似乎运行良好,但如果该服务是第一个访问导航的服务,那就更好了。

0 个答案:

没有答案