构造函数参数

时间:2016-01-22 13:27:28

标签: angular angular2-services

我有一个API类:

export class ApiService {

  constructor(public http: Http) { }

  put(controller: string, method: string, data: Object) {

    return this.http.put("http://127.0.0.1:8000",
      JSON.stringify(data), {
      })

    .map(res => res.json())

    .catch(err => {
      return Observable.throw(err.json());
    });

  }

}

和AccountService类:

export class AccountService {

  api: ApiService;

  constructor() {
    this.api = new ApiService();
  }

  login(username: string, password: string) {

    return this.api.put("accounts", "login", { username: username, password: password});

  }

}

但是,当我运行此示例时,存在两个问题:

1)ApiService需要构造函数中的http。因此,this.api = new ApiService();应提供Http,这不是我想要的。

如何修改ApiService,以便我不必向构造函数提供Http

2)AccountServicethis.api.put上找不到ApiService方法。自从我将ApiService实例化为this.api

后,我不明白这一点

1 个答案:

答案 0 :(得分:2)

事实上,你可以通过依赖注入将ApiService的实例导入AccountService

export class AccountService {
  constructor(private api: ApiService) {
  }
}

您只需注册两项服务:

bootstrap(AppComponent, [AccountService, ApiService]);

否则,我认为您无法使用putApiService的{​​{1}}方法。

希望它可以帮到你, 亨利