首页 文章

Angular 2依赖注入 - 服务注入某些组件但不是全部

提问于
浏览
1

我正在开发一个Angular 2应用程序,该应用程序只有一个模块,其中有几个服务在bootstrap中注册为提供者 . 该应用程序还在同一模块中使用这些服务的几个组件 .

所有组件都使用DI接收服务(服务在construtor中声明为参数) .

我面临的问题是:在某些组件中正确注入了相同的服务,但在其他组件中没有 .

我检查了Injector对象中注入失败的组件以及服务实例是否在Injector对象中 . 失败的是使用Injector.get()方法进行搜索 . 作为参数提供的令牌与存储在Injector字典中的令牌不同 . 我无法找到原因,因为我使用的是服务的类名,而Javascript引擎会自动从此类名生成令牌 .

我尝试使用OpaqueTokens来控制注入,并且,即使我使用相同的不透明令牌,当调用Injector.get()方法时,参数提供的令牌被认为与注入器存储的令牌不同 .

代码中的一个简短片段看起来像

myservice.service.ts

import { OpaqueToken } from '@angular/core'

export const BACKEND = new OpaqueToken('backend');

app.module.ts

import { BACKEND } from 'myservice.service'
...
providers: [{ provide: BACKEND, useValue: "TestValue" }]

mycomponent.component.ts

import { Component, Inject } from '@angular/core'
import { BACKEND } from 'myservice.service'

@Component(
{
selector:'mycomponent'
templateUrl: ...
})
export class MyComponent
{
  constructor(@Inject(BACKEND) config: string) {
    console.info(JSON.stringify(config));
  }
}

这种带有BACKEND令牌的注入适用于某些组件,但对于其他组件则不适用(注入空{}对象) . 我试图在浏览器中调试Javascript代码,它看起来像是使用与字典中的令牌不同的令牌调用Injector(它们看起来相同,具有相同的名称'后端'但仍然不同而且===返回false) .

注意:我使用的是Angular 2.4.2,Typescript 2.1,带有'commonjs'模块和'node'模块解析 . systemjs用作模块加载器 .

请你能提供一些关于如何解决这个问题的想法吗?

谢谢,

1 回答

相关问题