Javascript Angular 2依赖项注入-在某些组件中注入服务,但不是在所有组件中
我正在使用Angular 2应用程序,该应用程序只有一个模块,其中几个服务在bootstrap注册为提供者。应用程序在同一模块中还有几个组件正在使用这些服务 所有组件都使用DI接收服务(服务在Constructor中声明为参数) 我面临的问题是:在某些组件中正确地注入了相同的服务,但在其他组件中没有 我在Injector对象中检查了注入失败的组件,服务实例位于Injector对象中。它失败的是使用Injector.get()方法进行搜索。作为参数提供的令牌与喷油器字典中存储的令牌不同。我无法找出原因,因为我使用的是服务的类名,而令牌是由Javascript引擎根据该类名自动生成的 我尝试使用不透明令牌来控制注入,而且,同样,即使我使用的是相同的不透明令牌,当调用Injector.get()方法时,参数提供的令牌被认为与Injector存储的令牌不同 代码中的一个短片段如下所示 myservice.service.tsJavascript Angular 2依赖项注入-在某些组件中注入服务,但不是在所有组件中,javascript,angular,typescript,dependency-injection,Javascript,Angular,Typescript,Dependency Injection,我正在使用Angular 2应用程序,该应用程序只有一个模块,其中几个服务在bootstrap注册为提供者。应用程序在同一模块中还有几个组件正在使用这些服务 所有组件都使用DI接收服务(服务在Constructor中声明为参数) 我面临的问题是:在某些组件中正确地注入了相同的服务,但在其他组件中没有 我在Injector对象中检查了注入失败的组件,服务实例位于Injector对象中。它失败的是使用Injector.get()方法进行搜索。作为参数提供的令牌与喷油器字典中存储的令牌不同。我无法找出
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));
}
}
这种后端令牌注入对某些组件有效,但对其他组件无效(注入空的{}对象)。我试着在浏览器中调试Javascript代码,看起来调用注入器时使用的令牌与来自字典的令牌不同(它们看起来相同,名称相同,但仍然不同,并且===返回false)
注意:我使用的是Angular 2.4.2、Typescript 2.1以及“commonjs”模块和“node”模块分辨率。systemjs用作模块加载器
请问,你能提供一些关于如何解决这个问题的想法吗
谢谢,- 您是否有来自不同模块/组件的各种提供者声明?对于提供者数组中的每个声明,angular将创建这些服务的新实例
- 您是否在@Injectable装饰符中包含了括号
- 您是否有来自不同模块/组件的各种提供者声明?对于提供者数组中的每个声明,angular将创建这些服务的新实例
- 您是否在@Injectable装饰符中包含了括号
节点_模块
导入上放置一个前导的/
?实际上,我使用的是./or../取决于文件夹,因为应用程序非常大,并且按功能格式使用文件夹。您的导入似乎有点不寻常。您使用什么机制来避免在非节点_模块
导入上放置前导的/
?实际上,我使用的是./or../取决于文件夹,因为应用程序很大,并且按功能格式使用文件夹。这并不能回答问题。一旦你有足够的钱,你就可以在任何岗位上工作。也请检查此项。@Injectable()decorator有括号,因为否则对某些组件不起作用。它更像是“您是否有来自不同模块/组件的各种提供程序声明”,但方式很奇怪。显然,即使在不同的文件中,我也没有使用同名的两个服务,但我的文件夹大小写不一。当我将文件夹重命名为仅使用小写字母时,问题就解决了。我使用Windows计算机进行开发。这并不能回答这个问题。一旦你有足够的钱,你就可以在任何岗位上工作。也请检查此项。@Injectable()decorator有括号,因为否则对某些组件不起作用。它更像是“您是否有来自不同模块/组件的各种提供程序声明”,但方式很奇怪。显然,即使在不同的文件中,我也没有使用同名的两个服务,但我的文件夹大小写不一。当我将文件夹重命名为仅使用小写字母时,问题就解决了。我使用Windows计算机进行开发。