我对 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?