angular2共享一个http服务层

时间:2016-04-07 23:44:07

标签: angular angular2-services

我需要创建一个可以在不同的angular2应用程序之间共享的服务。此服务将访问其余的api并包装其数据,以便角度应用程序可以使用它。如果我使用angular2 http服务,那么我需要将整个angular2作为服务的依赖项。

目前我希望将服务层作为单独的npm包,以便我可以在多个项目之间重用它。

有没有更好的方法来实现可重用性而不是将整个angular2库安装到服务包中?

1 个答案:

答案 0 :(得分:1)

  • 您不需要使用Angulars Http。您可以构建自己的类来调用XMLHttpRequest或直接使用fetch API或任何其他执行AJAX请求的库。

  • Angular会将Http移动到它自己的包中(来自Angular2主仓库)https://github.com/angular/http(正在进行中)

  • 您可以在HTTP服务层中创建与Http类的公共API匹配的接口,然后在引导Angular应用程序时将Http实例传递给服务。

interface MyHttp {
  get(url: string, options?: RequestOptionsArgs): Observable<Response>;
  ...
}

let myHttpService = new MyHttpService();

bootstrap(AppComponent1, [
    HTTP_PROVIDERS, 
    provide(MyHttpService, {
        deps: [Http], 
        useFactory: (http) => {
          if(!myHttpService.http) {
            myService.http = http;
          }
          return myService;
        })
    })]
);

然后在您的组件和服务中使用它

export class MyComponent {
  constructor(private _myHttp: MyHttpService) {
    this._myHttp.doSomething();
  }
}

提示:如果您还希望将MyHttpService作为Http的替代品(对于您无法控制的组件和服务请求Http使用您的MyHttpService)提供者需要看起来不同。