我对 Ionic 2 应用程序 (v2.0.0-beta.30) 中的每个 HTTP 请求都有一些我想做的事情,所以我创建了自己的 Http 类来扩展 angular 的服务。像这样的东西:
@Injectable()
export class myHttp extends Http
{
private myStuff(): void
{
//stuff to fo every request
}
public request(url: string | Request, options?: RequestOptionsArgs): Observable<Response>
{
this.myStuff();
return super.request(url, options);
}
public get(url: string, options?: RequestOptionsArgs): Observable<Response>
{
this.myStuff();
return super.get(url, options);
}
// etc.
}
我有东西当前正在调用函数Http
,我不想更改所有要调用的东西MyHttp
。我希望任何发出请求的东西都不知道也不关心它实际上是在调用MyHttp
. 似乎应该有一种方法可以提供MyHttp
而不是Http
,我只是不确定您将在哪里使用 Ionic 2 应用程序来执行此操作。
我尝试添加这样的ionicBootstrap
功能:
ionicBootstrap(MyApp, [new ProviderBuilder(Http).toClass(MyHttp)], {});
这只是给了我死亡的白屏。我还尝试像这样添加到类的@Component
装饰器中MyApp
:
@Component({
providers: [new ProviderBuilder(Http).toClass(MyHttp)],
templateUrl: "build/app.html"
})
这给出了相同的白屏。我不确定我是否理解差异,因为我尝试过toAlias
而不是toClass
得到相同的结果。
MyHttp
当有任何东西要注射时,我如何告诉注射器注射Http
?
- - - - 更新 - - - - - -
我终于通过我的尝试绕过了死亡的白屏,也包括HTTP_PROVIDERS
在提供者的数组中。但是,它仍然是注入Http
而不是MyHttp
在使用它的其他服务中。我已经尝试了以下各项:
{ provide: Http, useClass: MyHttp }
provide(Http, {useClass: myHttp })
new ProviderBuilder(Http).toClass(MyHttp)
所依赖的服务Http
如下所示:
public constructor(http: Http)
{
//...
}
我在这里放了一个调试器,我可以看到它是 angular'sHttp
而不是MyHttp
.
-------- 更新 2 ------------
我尝试用不同的班级做同样的事情,我确实看到它有效。例如:
ionicBootstrap(MyApp, [new ProviderBuilder(MyOtherClass).toClass(MyOtherClass2)], {});
我看到MyOtherClass2
它要求时被注射MyOtherClass
。所以,我不知道我是否做错了什么,MyHttp
或者Http
. 有没有人能够成功地做到这一点Http
?