在另一个服务角2中注入服务

bin*_*dMe 5 typescript angular

我尝试使用角度为2的DI在另一个服务中注入一个服务

import {HttpService} from 'scripts/httpService';
export class CurrentBlog{
    constructor(public httpService:HttpService){}
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到此错误:

无法解析CurrentBlog(?)的所有参数.确保它们都具有有效的类型或注释.

我用正常组件测试了DI,它工作正常.但是当我注入服务时.它根本不起作用.

bin*_*dMe 0

在这种情况下,仅仅 DI 是不够的。下面的链接解决了同样的问题:

\n\n

http://blog.thoughtram.io/angular/2015/09/17/resolve-service-dependency-in-angular-2.html

\n\n

所以它说:

\n\n

设置 emitDecoratorMetadata 选项时,TypeScript 会生成元数据。然而,这并不意味着它会盲目地为我们代码的每个类或方法生成元数据。当装饰器实际附加到特定代码时,TypeScript 仅生成类、方法、属性或方法/构造函数参数的元数据。否则,会生成大量未使用的元数据代码,这不仅会影响文件大小,而且\xe2\x80\x99d也会对我们的应用程序运行时产生影响。

\n\n

因此,为了强制元数据生成,我们可以尝试添加以下两个注释之一:

\n\n
import {HttpService} from \'scripts/httpService\';\nimport {Inject} from \'angular2/core\';\nexport class CurrentBlog{\n\nconstructor(@Inject(HttpService) public httpService:HttpService){}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,

\n\n
import {Injectable} from \'angular2/core\';\nimport {HttpService} from \'scripts/httpService\';\n@Injectable()\nexport class CurrentBlog{\n\nconstructor(public httpService:HttpService){}\n}\n
Run Code Online (Sandbox Code Playgroud)\n