Javascript 在服务中插入多个服务-angular2
我正在尝试将一个自行创建的服务&angular2http服务注入到我的定制HttpRest服务中 使用 工作正常,但当我尝试注入另一个自制服务时,出现以下错误:Javascript 在服务中插入多个服务-angular2,javascript,typescript,angular,angular2-services,Javascript,Typescript,Angular,Angular2 Services,我正在尝试将一个自行创建的服务&angular2http服务注入到我的定制HttpRest服务中 使用 工作正常,但当我尝试注入另一个自制服务时,出现以下错误: EXCEPTION: Cannot resolve all parameters for 'HttpRest'(Http @Inject(Http), undefined @Inject(undefined)). Make sure that all the parameters are decorated with Inject or
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.
出于某种原因
用户标识未定义,即使导入成功。
我的定制服务:
@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;
}
}
自定义HttpRequest服务im将Http和用户ID注入到:
@Injectable()
export class HttpRest{
groups;
constructor(
@Inject(Http) public _http: Http,
@Inject(UserIds) public _ids: UserIds
){}
...
}
注意!当我移除
,
@Inject(UserIds) public _ids: UserIds
我不知道这个错误。我错过了什么 更新
问题是,由于我试图理解的未知原因,用户ID在构造函数参数中没有定义,所以这个问题的标题变得无关紧要。应该是“导入的服务在构造函数参数中未定义”。
请参考我对这个问题的回答 更新:
请参考讨论此问题的问题。
您需要在根级别(main.ts)或中注册
用户ID,这是层次结构中的最高级别:
@Component({
selector: 'my-app',
template: '<h1>My First Angular 2 App</h1>',
providers: [ UserIds ]
})
export class AppComponent { }
@组件({
选择器:“我的应用程序”,
模板:“我的第一个Angular 2应用程序”,
提供者:[用户ID]
})
导出类AppComponent{}
@Inject(…)
在@Inject(Http)public\u Http:Http
中,当@Inject()
的参数与参数类型相同时,该参数是冗余的
@Injectable()
export class HttpRest{
groups;
constructor(public _http: Http, public _ids: UserIds
){}
...
}
您需要提供Http
和userid
,以便DI能够解决依赖关系<代码>Http
包含在Http\u提供程序中
@Component({
selector: '...',
providers: [HTTP_PROVIDERS, UserIds],
template: ...
})
export class AppComponent {
}
确保正确导入了所有内容
import {HTTP_PROVIDERS, Http} from 'angular2/http';
好的,我发现了问题,这与注射无关。
问题是,正如angular 2 style guide()中提到的,im使用索引文件导出服务,并且由于某种原因,从索引导入此特定服务会在注入构造函数时导致未定义的值。
当我直接引用源代码而不是通过索引文件时,由于某种未知的原因,解决了错误
修复之前的导入如下所示:
import {UserIds} from "../index";
它与所有其他服务和组件一起工作
使用直接源文件的导入:
import {UserIds} from "../user_ids/user_ids.service";
出于某种原因,这解决了我的问题,但我希望与index.ts封装保持一致
如果有人知道为什么会发生这种情况,我很乐意提供更新。我这样做没有结果@组件({selector:“…”,templateUrl:“…”,指令:[ROUTER_指令],提供程序:[ROUTER_提供程序,HttpRest,userid,provide(LocationStrategy,{useClass:HashLocationStrategy})])问题是,由于我试图理解的未知原因,用户ID在构造函数参数中没有定义,所以这个问题的标题变得无关紧要。它应该是“导入的服务在构造函数参数中未定义”。即使我将导入的类保存在一个成员中,也会发生这种情况,我可以看到它在构造函数执行上下文中被赋值。是否每个类都在自己的文件中。如果您使用的类名位于同一个文件中,那么它将不起作用。上课时间不长。否则,导入将被破坏。否则,如果有一个Plunker,它允许在导出单个类的文件中复制(模板)类,这将是很有帮助的。不过,我将创建一个plunker来显示问题,并将其作为一个新问题发布。然后,我会用这个问题的链接更新这篇文章。现在我在这里给主要问题添加了一个更新注释,因为这个问题的标题是不相关的。我刚刚遇到了同样的问题。谢谢你的解决方案,但我也想知道问题出在哪里。。我不想直接引用我的类,但我正在构建桶。。。。
import {UserIds} from "../user_ids/user_ids.service";