我认为这对于许多其他开发人员来说可能是常见问题,但我还没有找到一些有效的解决方案。
我正在从事 Angular2 项目。当然,我有很多地方需要进行http调用来管理我的数据。所以我正在使用Http服务,一切都按预期进行。
在某些架构阶段(当团队实现了大部分页面时),新的要求出现了 - 现在我们需要更深入地连接服务器和客户端,因此应将附加标头添加到从客户端发起的所有请求中(可以是经过身份验证的不记名令牌,方法覆盖指令以通过防火墙,还有许多其他)。
根本不是问题。10分钟完成:
MyHttpget, post, put,delete方法Http引用为新的MyHttp但当你有很多开发人员参与时,这种方法就不好了:
Http服务MyHttp将被重新使用的风险,因为这两个服务都是可访问的,因此将引入不正确的行为因此,更适合多团队开发的方法是使用模块类注释用新的使用配置@NgModule替换旧Http服务:MyHttpprovide
@NgModule({
declarations: [ ... ],
imports: [ ... ],
providers: [..., {provide: Http, useClass: MyHttp}],
bootstrap: [AppComponent]
})
Run Code Online (Sandbox Code Playgroud)
从我的角度来看,这种方法有很多优点:
Http为MyHttpHttp使用服务无需更改开发者规则MyHttp代替Http- 它们的行为相同唯一的问题是,我们正在创建循环依赖,因为MyHttp我们需要在内部使用旧的Http
@Injectable()
export class HttpService {
constructor(private http: Http) {
}
get(url: string) { return this.http.get(url); }
post(url: string, data: any) { ...}
...
}
Run Code Online (Sandbox Code Playgroud)
所以抛出异常:
无法实例化循环依赖!
所以唯一的方法——就是创造MyHttp完全独立于Http. 但它增加了代码的复杂性。老实说,这种实施的味道。
是否有任何解决方案如何使用上面定义的配置Http内部使用?MyHttp
谢谢。
@Injectable()
export class MyHttp extends Http {
}
@NgModule({
declarations: [ ... ],
imports: [ HttpModule, ... ],
providers: [...,
{provide: ConnectionBackend, useClass: XhrBackend},
{provide: Http, useClass: MyHttp}
],
bootstrap: [AppComponent]
})
Run Code Online (Sandbox Code Playgroud)
不需要以这种方式注入 HTTP。
只需从https://github.com/angular/angular/blob/5921c872b6ef2f2de31f90576660a1bf56afb979/modules/%40angular/http/src/http.ts#L103-L184覆盖你想要的不同行为。
| 归档时间: |
|
| 查看次数: |
1435 次 |
| 最近记录: |