我正在尝试将自己创建的服务和 angular2 Http 服务注入(inject)到我的自定义 HttpRest 服务中。
使用
@Inject(Http) public _http: Http
工作正常,但是当我尝试注入(inject)另一个自制服务时出现以下错误:
EXCEPTION: Cannot resolve all parameters for 'HttpRest'(Http @Inject(Http), undefined @Inject(undefined)). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'HttpRest' is decorated with Injectable.
出于某种原因 UserIds 未定义,即使导入成功。 我的定制服务:
@Injectable()
export class UserIds{
private _signature_id:string;
private _role_id:number;
get signature_id():string{
return this._signature_id;
}
set signature_id(id:string){
this._signature_id = id;
}
get role_id():number{
return this._role_id;
}
set role_id(id:number){
this._role_id = id;
}
}
自定义 HttpRest 服务即时注入(inject) Http 和 UserIds 到:
@Injectable()
export class HttpRest{
groups;
constructor(
@Inject(Http) public _http: Http,
@Inject(UserIds) public _ids: UserIds
){}
...
}
注意!当我删除
,
@Inject(UserIds) public _ids: UserIds
我没有得到错误。
我错过了什么?
更新
问题实际上是由于我试图理解的某种未知原因,UserIds 在构造函数参数中未定义,因此这个问题的标题变得无关紧要。它应该是“导入的服务在构造函数参数中未定义”。
请引用我在这篇文章后面对这个问题的回答。
更新:
请引用讨论此问题的问题。
Using index.ts file to export class causes undefined in injected constructor
最佳答案
@Inject(...)
in @Inject(Http) public _http: Http
当参数为@Inject()
时是多余的> 与参数的类型相同。
@Injectable()
export class HttpRest{
groups;
constructor(public _http: Http, public _ids: UserIds
){}
...
}
您需要提供 Http
和 UserIds
以便 DI 能够解决依赖关系。 Http
包含在 HTTP_PROVIDERS
@Component({
selector: '...',
providers: [HTTP_PROVIDERS, UserIds],
template: ...
})
export class AppComponent {
}
确保您已正确导入所有内容
import {HTTP_PROVIDERS, Http} from 'angular2/http';
关于javascript - 将多个服务插入服务 - angular2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37048080/