gpt4 book ai didi

angular - Ionic2 如何在提供程序中获取 NavController

转载 作者:太空狗 更新时间:2023-10-29 17:22:08 26 4
gpt4 key购买 nike

我创建了 AuthHttpProvider,它是一个 Http 包装器,它允许发送 GET/POST/PUT/DELETE 请求并自动向每个请求添加身份验证 token (jwt)。我在我所有的 ionic2 应用程序中使用这个包装器而不是 Http。现在,当我检测到来自服务器的任何响应都有 403 Http 错误代码时,我想注销用户(并转到登录页面)。

所以当我尝试通过

constructor (public navCtrl: NavController)

我得到:

Uncaught (in promise): Error: No provider for NavController

如何在 Provider 中访问 navCtrl?

最佳答案

这是解决方案(来自 this ):

import { Injectable, Injector } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { Observable } from "rxjs";
import 'rxjs/add/operator/map';
import { App } from "ionic-angular";
import { NavController } from "ionic-angular/index";
import { LoginPage } from "../../pages/login/login";
...

@Injectable()
export class AuthHttpProvider {

private navCtrl: NavController;
...

constructor(public http: Http, ..., private app:App ) {
this.navCtrl = app.getActiveNav();
}

get(url) { // http GET
return this.http.get(url, this.getHeaders() )
.catch(this.globalErr(this));
}

// ... http POST/PUT/DELETE

private getHeaders() { ... } //(cors, csrf-token ...)

private globalErr(self) {
return (err) => {
if ( err.status == 403 ) { self.logout(); }
return Observable.throw(err);
};
}

public logout() {
// ...
this.navCtrl.setRoot(LoginPage);
this.navCtrl.popToRoot;
}
}

但更好的是,如果 Provider 能够引发一些事件/异常并且 UI 能够拦截它并将 View 更改为 loginPage

关于angular - Ionic2 如何在提供程序中获取 NavController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44522945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com