Ionic 3. Проблемы с NavController.Он перестает работать правильно, когда я выхожу - PullRequest
0 голосов
/ 13 мая 2018

У меня есть ионное приложение с логином / регистрацией + валидацией и дом с парой просмотров.Структура может выглядеть примерно так:

Структура просмотров

У меня нет проблем с перемещением по приложению, пока я не использую выход из системы.Когда это происходит, когда я регистрируюсь, я попадаю на страницу проверки, и когда я получаю ответ с OK с сервера, я не перенаправляюсь на домашнюю страницу.Я также получаю двойную кнопку «назад» в моих сложенных видах.

Может быть, я не чищу что-то правильно.Я не получаю никакой ошибки, просто все перестает работать правильно.Кто-нибудь может мне помочь с этой проблемой?

Сейчас я использую Ionic 3.19.1.Просто спросите, нужна ли вам дополнительная информация.

Это мой выход из системы и представление, в котором оно содержится:

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, ViewController, App } from 'ionic-angular';
import { WebSocketServiceProvider } from '../../providers/websocket-service/websocket-service';

@IonicPage()
@Component({
    selector: 'page-home-popover',
    templateUrl: 'home-popover.html',
})
export class HomePopoverPage {

    constructor(public navCtrl: NavController, public navParams: NavParams, public viewCtrl: ViewController,
        public appCtrl: App, public websocketService : WebSocketServiceProvider, public app: App) {
    }

    ionViewDidLoad() { }

    closeMenu() {
        this.viewCtrl.dismiss();
    }

    options(tab) {
        this.closeMenu();
        this.navCtrl.push('OptionsTabsPage', tab);
    }

    logout() {
        localStorage.clear();
        this.websocketService.close();
        this.closeMenu();
        let rootNav = this.app.getRootNav();
        rootNav.setRoot('LoginPage');
    }
}

sms-validation.ts

import { Component } from '@angular/core';
import { IonicPage, NavController, AlertController, App } from 'ionic-angular';
import { AuthServiceProvider } from '../../providers/auth-service/auth-service';
import { NavParams } from 'ionic-angular/navigation/nav-params';

@IonicPage()
@Component({
    selector: 'page-sms-validation',
    templateUrl: 'sms-validation.html',
})
export class SmsValidationPage {

    validated = false;
    validationCode: '';
    nickname: '';

    constructor(private navCtrl: NavController, private auth: AuthServiceProvider, public alertCtrl: AlertController,
        public navParams: NavParams, public app: App) {
        this.nickname = navParams.get('nickname');
    }

    public smsValidation() {
        this.auth.validateCode(this.nickname, this.validationCode).subscribe(response => {
            console.log('validateCode response', response);
            if (response.status) {
                this.validated = true;
                console.log('Validated', this.validated);
                localStorage.setItem("nickname", this.nickname);
                this.navCtrl.setRoot('HomePage');
                //this.showPopup("Success", "Account validated.");
            } else {
                this.showPopup("Error", "Problem validating account. " + response.message);
            }
        },
        error => {
            console.log('Error', error);
            //this.showPopup("Error", error.message);
        });
    }

    showPopup(title, text) {
        console.log('showPopup', title, text, this.validated);
        let alert = this.alertCtrl.create({
            title: title,
            subTitle: text,
            buttons: [
                {
                    text: 'OK',
                    handler: data => {
                        if (this.validated) {
                            this.navCtrl.setRoot('HomePage');
                        }
                    }
                }
            ]
        });
        alert.present();
    }


    ionViewDidLoad() { }

}

app.html

<ion-nav [root]="rootPage"></ion-nav>

1 Ответ

0 голосов
/ 13 мая 2018

Я думаю, что вы должны отправить свою страницу входа в компонент Nav корневого приложения.Ваша функция выхода из системы должна быть:

logout() {

    localStorage.clear();

    this.websocketService.close();
    this.close(); // --> I suppose you know what you are doing here

    let rootNav = this.app.getRootNav();
    rootNav.setRoot('LoginPage');

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...