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

时间:2015-11-29 03:44:26

标签: angular typescript

我尝试使用角度为2的DI

在另一个服务中注入一个服务
import {HttpService} from 'scripts/httpService';
export class CurrentBlog{
    constructor(public httpService:HttpService){}
}

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

  

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

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

2 个答案:

答案 0 :(得分:1)

在角度2中,您需要让角度注射器了解您的服务。为此,您需要将服务标记为“可注入”。

HttpService的

import {Injectable} from 'angular2/angular2';

@Injectable()
export class HttpService{
    ...
}

CurrentBlog

import {HttpService} from 'scripts/httpService';
import {Inject} from 'angular2/core';

export class CurrentBlog{

    constructor(public httpService:HttpService){}
}

答案 1 :(得分:0)

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

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

所以它说:

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

因此,为了强制执行Metadta Generations,我们可以尝试使用以下两个注释中的任何一个:

import {HttpService} from 'scripts/httpService';
import {Inject} from 'angular2/core';
export class CurrentBlog{

constructor(@Inject(HttpService) public httpService:HttpService){}
}

或者,

import {Injectable} from 'angular2/core';
import {HttpService} from 'scripts/httpService';
@Injectable()
export class CurrentBlog{

constructor(public httpService:HttpService){}
}