首页 文章

angular2共享一个http服务层

提问于
浏览
1

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

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

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

1 回答

  • 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 ),则提供商需要以不同的方式查看 .

相关问题