javascript – 使用index.ts文件导出类导致注入的构造函数中未定义

我正在使用index.ts文件封装出口,如角度2样式指南(https://github.com/mgechev/angular2-style-guide/blob/master/old/README.md#directory-structure)中所述.
这在我写的应用程序中运行良好,但由于某种原因在一个服务中,我试图注入另一个服务,这会导致一个奇怪的错误.

导出的类:

import {Injectable} from "angular2/core";
@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;
   }
}

index.ts文件:

export {Midiate} from "./midiate.service/midiate.service";
export {HttpRest} from "./http_rest.service/http_rest.service";
export {UserIds} from "./user_ids.service/user_ids.service"

导致错误的代码(导入文件):

import {UserIds} from "../index";
import {Http} from 'angular2/http';
@Injectable()
export class HttpRest{
 constructor(
    public _http: Http,
    public userIdsx: UserIds
 ){}
...
}

浏览器抛出的错误:

EXCEPTION: Cannot resolve all parameters for 'HttpRest'(Http, undefined). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'HttpRest' is decorated with Injectable.

正如您所看到的,UserIds类在构造函数的参数中是未定义的.

将UserIds导入更改为源文件修复了问题:

import {UserIds} from "../user_ids.service/user_ids.service";

我仍然希望使用index.ts作为我的应用程序中的所有其他服务和组件来保持旧样式,并且还理解为什么会发生这种情况.

最佳答案
在Minko Gechev的风格指南中,他按名称引用了该文件.我也遇到了这个问题,只是将我的立面文件移到一个文件夹中,然后按名称引用该文件.我还重命名了该文件夹,以避免名称与facade文件冲突,因为路径混淆,因为路径中没有文件扩展名

我遇到了this question,它询问在文件夹中创建一个index.ts文件,他们遇到了同样的问题.

| shared
    | services
        | login.service.ts
        | blog.service.ts

| shared
    | _services
        | login.service.ts
        | blog.service.ts
    | services.ts

services.ts包含的地方

export {LoginService} from './_services/login.service'
export * from './_services/blog.service'

然后,我使用以下导入引用我的服务

import {LoginService, BlogService} from './shared/services'

转载注明原文:javascript – 使用index.ts文件导出类导致注入的构造函数中未定义 - 代码日志