Невозможно установить и удалить параметр для хранилища в приложении Ionic - PullRequest
0 голосов
/ 17 января 2019

Я работаю над приложением Ionic Ecommerce, и когда пользователь входит в систему, после этого я устанавливаю идентификатор пользователя в хранилище, и когда пользователь нажимает кнопку выхода, он удаляет хранилище, но не устанавливает для параметра значение Хранение.

Это мой loginpage.t s:

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, AlertController, Events } from 'ionic-angular';
import { RestapiProvider } from '../../providers/restapi/restapi';
import { RegisterPage } from '../register/register';
import { CartPage } from './../cart/cart';
import {ForgetpasswordPage} from '../forgetpassword/forgetpassword';
import {Validators, FormBuilder, FormGroup } from '@angular/forms';
import { MyApp } from './../../app/app.component';
import { Storage } from '@ionic/storage';

@IonicPage()
@Component({
  selector: 'page-loginpage',
  templateUrl: 'loginpage.html',
})
export class LoginpagePage {
  todo : FormGroup;
  responseData : any;
  userData = {"username": "", "password": ""};
  user: any;
  constructor(public navCtrl: NavController, public navParams: NavParams,
    public restProvider: RestapiProvider, private formBuilder: FormBuilder, private alertCtrl: AlertController, public events: Events, private storage: Storage) {
      this.todo = this.formBuilder.group({
        username: ['', Validators.required],
        password: ['', Validators.required],
      });

  }

  createUser(user) {
    this.events.publish('user:created', user);
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad LoginpagePage');
  }

    getloginUsers(){
      this.restProvider.getUsers(this.userData, 'user_Login').subscribe((data) => {
        if (data) {
          this.responseData = data;
          this.user = this.responseData.msg.name;
          this.storage.set("ID", this.responseData.msg.id);  <!-- I am setting the User Id to the Storage -->
          this.createUser(this.user);
          if (this.responseData.status === 'success') {
            this.navCtrl.push(MyApp);
          }
          else{
            this.presentAlert();
          }
        }
      });
 }

 presentAlert() {
  let alert = this.alertCtrl.create({
    title: 'Incorrect Username Or Password',
    buttons: ['Dismiss']
  });
  alert.present();
 }
}

Когда пользователь входит в систему, я устанавливаю идентификатор пользователя в хранилище.

Это мой app.component.ts :

import { LoginpagePage } from './../pages/loginpage/loginpage';
import { FrontPage } from './../pages/front/front';
import { Component, ViewChild } from '@angular/core';
import { Events, Nav, Platform } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { ProductPage } from '../pages/product/product';
import { MyordersPage } from '../pages/myorders/myorders';
import { Storage } from '@ionic/storage';

@Component({
  templateUrl: 'app.html'
})
export class MyApp {
  @ViewChild(Nav) nav: Nav;
  menuclick: boolean = true;
  menuclick2: boolean = false;
  rootPage: any = FrontPage;
  uemail: string;
  userName1: string;
  pages: Array<{title: string, component: any, name2: string}>;

  constructor(public platform: Platform, public statusBar: StatusBar, public splashScreen: SplashScreen, public events: Events, private storage: Storage) {
    this.initializeApp();
    this.pages = [
      { title: 'Home', component: FrontPage, name2: 'home' },
      { title: 'Product Categories', component: ProductPage, name2: 'basket' },
      { title: 'Merchandise', component: ProductPage, name2: 'man' },
      { title: 'My Orders', component: MyordersPage, name2: 'cart' },
    ];

    this.events.subscribe('user:created', (data) => { // update from login
      this.userName1 = data;
      this.menuclick2 = true;
      this.menuclick = false;
 });

  }

  initializeApp() {
    this.platform.ready().then(() => {
      this.statusBar.styleDefault();
      this.splashScreen.hide();
    });
  }

  openPage(page) {
    this.nav.setRoot(page.component);
  }

  loginpage2()
  {
    this.nav.push(LoginpagePage);
  }

  logoutClicked() {
    console.log("Logout");
    this.storage.remove("ID");  <!-- I am removing the set item from the Storage  -->
    this.nav.setRoot(FrontPage);
    this.userName1 = null;
    this.menuclick2 = false;
    this.menuclick = true;
  }

}

Когда я проверяю идентификатор пользователя в myorders.ts, он не возвращает никакого значения:

Это мой myorders.ts :

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { CartPage } from './../cart/cart';
import { Storage } from '@ionic/storage';

@IonicPage()
@Component({
  selector: 'page-myorders',
  templateUrl: 'myorders.html',
})
export class MyordersPage {
  userhas: boolean = false;
  usernot:  boolean = true;
  newuserid: any;
  constructor(public navCtrl: NavController, public navParams: NavParams, private storage: Storage) {
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad MyordersPage');
  }

  public GetUsername(){
    if(this.storage.get("ID"))
    {
      this.userhas = true;
      this.usernot = false;
      this.newuserid = this.storage.get("ID");
    }
  }

  cardpage2()
 {
   this.navCtrl.push(CartPage);
 }
}

Это мой myorders.html :

 <p>{{this.newuserid}}</p>

В этом app.component.ts у меня есть функция выхода из системы, при которой идентификатор пользователя удаляется из хранилища, но проблема в том, что я не могу установить и удалить элемент из хранилища. Любая помощь очень ценится.

1 Ответ

0 голосов
/ 18 января 2019
 this.storage.remove("ID").then(() => {
    this.userName1 = null;
    this.menuclick2 = false;
    this.menuclick = true;
    this.nav.setRoot(FrontPage);
  });

storage.remove возвращает Обещание, подождите, прежде чем делать другие вещи.

Также попробуйте установить Rooot после команд очистки ...

...