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,它工作正常.但是当我注入服务时.它根本不起作用.
在这种情况下,仅仅 DI 是不够的。下面的链接解决了同样的问题:
\n\nhttp://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\nimport {HttpService} from \'scripts/httpService\';\nimport {Inject} from \'angular2/core\';\nexport class CurrentBlog{\n\nconstructor(@Inject(HttpService) public httpService:HttpService){}\n}\nRun Code Online (Sandbox Code Playgroud)\n\n或者,
\n\nimport {Injectable} from \'angular2/core\';\nimport {HttpService} from \'scripts/httpService\';\n@Injectable()\nexport class CurrentBlog{\n\nconstructor(public httpService:HttpService){}\n}\nRun Code Online (Sandbox Code Playgroud)\n