我需要创建一个可以在不同的angular2应用程序之间共享的服务。此服务将访问其余的api并包装其数据,以便角度应用程序可以使用它。如果我使用angular2 http服务,那么我需要将整个angular2作为服务的依赖项。
目前我希望将服务层作为单独的npm包,以便我可以在多个项目之间重用它。
有没有更好的方法来实现可重用性而不是将整个angular2库安装到服务包中?
答案 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
)提供者需要看起来不同。