Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在服务中插入多个服务-angular2_Javascript_Typescript_Angular_Angular2 Services - Fatal编程技术网

Javascript 在服务中插入多个服务-angular2

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

我正在尝试将一个自行创建的服务&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 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";