[英]How interceptor terminate handle Angular 4?
我有一個 Ionic 3 應用程序項目,當應用程序收到來自服務器的響應時,我添加了一個攔截器,當響應的狀態等於 401 時,應用程序跳轉到登錄頁面,我使用app.getRootNav().setRoot(LoginPage)
。 但是,當帶有toast的頁面收到401響應時,仍然會出現toast,這是意料之中的
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.rest = this.inj.get(RestProvider);
return next.handle(req).do(
res => {
...
},
err => {
if (err instanceof HttpErrorResponse) {
if (err.status == 401) {
this.app.getRootNav().setRoot(LoginPage);
super.showToast(this.toastCtrl, "sorry, due to authorization, you must login again")
return;
} else {
throw err;
}
}
})
}
然后當我的 HTTP 請求是這樣的:
this.http.post(this.baseUrl + "/recvUsername",param)
.subscribe(
res => {
this.initRecvUsernames(res["data"]);
},
err => {
console.error("get receive user error:" + err.message);
super.showToast(this.toast, "get receive user error");
}
)
那么當我跳轉到登錄頁面時,toast at request 頁面將顯示,如何終止 toast at request 頁面?
您可以在 http params 中傳遞一個標志並在攔截器中將其刪除
const params = req.params;
const isPreventToast = params.has('preventToast');
params.delete('preventToast')
const newReq = req.clone({ params });
return next.handle(newReq).do(..., err => { if(!isPreventToast) ... })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.