Получил проблему navCtrl в ionic 3 при попытке использовать его внутри провайдера - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь заставить пользователя перейти на страницу входа, когда его / ее токен истекает.Дело в том, что внутри провайдера токена-перехватчика он показывает красную линию под do здесь:

  return next.handle(_req).do((event: HttpEvent<any>) => {

, а также под этой строкой под navCtrl:

this.navCtrl.push('LoginPage');

Вот полный код:

import { switchMap } from 'rxjs/operators';
import { TokenProvider } from './token/token';
import { Observable } from 'rxjs/Observable';
import { fromPromise } from 'rxjs/observable/fromPromise';
import { Injectable } from '@angular/core';
import {
  HttpInterceptor,
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpResponse,
  HttpErrorResponse
} from '@angular/common/http';
import {
  IonicPage,
  NavController,
  NavParams,
  AlertController,
  LoadingController
} from 'ionic-angular';


@Injectable()
export class TokenInterceptor implements HttpInterceptor {
  constructor(private tokenProvider: TokenProvider) {}

  intercept(
    req: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    return fromPromise(this.tokenProvider.GetToken()).pipe(
      switchMap(token => {
        const headersConfig = {
          'Content-Type': 'application/json',
          Accept: 'application/json'
        };
        if (token) {
          headersConfig['Authorization'] = `beader ${token}`;
        }
        const _req = req.clone({ setHeaders: headersConfig });
        return next.handle(_req).do((event: HttpEvent<any>) => {
      if (event instanceof HttpResponse) {
        // do stuff with response if you want
      }
    }, (err: any) => {
      if (err instanceof HttpErrorResponse) {
        if (err.status === 401) {
          this.navCtrl.push('LoginPage');
          // or show a modal
        }
      }
    });
      })
    );
  }
}

Что не так и как исправить эти 2 проблемы?

1 Ответ

0 голосов
/ 09 июля 2019

вы используете this.navCtrl.Перед этим нам нужно импортировать NavController.нравится ссылка (https://ionicframework.com/docs/v3/api/navigation/NavController/)

import { NavController } from 'ionic-angular';

class MyComponent {
  constructor(public navCtrl: NavController) {

  }
  service(){
  this.navCtrl.push('MyPage');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...