使用' - prod'进行构建时,Ionic 2本地存储读取问题

时间:2017-03-28 06:06:24

标签: android cordova angular ionic-framework ionic2

我正在构建一个应用程序,当应用程序启动时为用户执行自动登录,如果它已关闭而未注销上次。这是通过在成功登录时设置本地存储值并在登录页面的构造函数(即登录页面)中读取它来完成的。

我使用ionic build android -release构建和app工作正常。但加载大约需要10秒。经过一些搜索,我发现使用--prod构建应用程序可以减少加载时间,并且确实将我的应用程序加载时间减少到4秒。

但现在应用程序无法在开始时读取本地存储值。没有错误。但是,它只是将值返回null。在其他页面中,应用程序可以读取本地存储。当应用程序到达目标网页时,看起来某些所需组件未完全加载。但是,当用户手动登录时,会加载这些内容。如何在减少加载时间的同时实现自动登录?

import { Component } from '@angular/core';
import { NavController, MenuController, NavParams } from 'ionic-angular';
import { AuthService } from '../../providers/auth-service';
import { Global } from '../../providers/global';
import { HomePage } from '../home/home';
import { Storage } from '@ionic/storage';
import { Network } from 'ionic-native';

@Component({
  selector: 'page-login',
  templateUrl: 'login.html'
})
export class LoginPage {

  loginUserID: string = '';
  loginUserPass: string = '';
  showLogin = false;

  constructor(private menu: MenuController, private navCtrl: NavController, private auth: AuthService, private global: Global, private storage: Storage, private navParams: NavParams) {
    this.storage.get('user_id').then((value) => {
      if(this.navParams.get('showLogin')){
        this.showLogin = true;
      }
      else{
        if(value && value != null){
          this.navCtrl.setRoot(HomePage);
        }
        else{
          this.showLogin = true;
        }
      }
    });

    if(this.global.hardwareBackAction != null){
      this.global.hardwareBackAction();
    }
  }

  ionViewDidLoad() {
    this.menu.swipeEnable(false, 'side-menu');
  }

  public login() {
    if (Network.type == 'none') {
      this.global.showAlert('Information', 'No internet access');
    }
    else {
      this.global.showLoading();
      this.auth.login(this.loginUserID, this.loginUserPass).subscribe(allowed => {
            this.global.loading.dismiss();
            if (allowed) {
              setTimeout(() => {
                this.storage.set('user_id', this.loginUserID);
                this.navCtrl.setRoot(HomePage);
              });
            }
          },
          error => {
            this.showError(error);
          });
    }
  }

  showError(text) {
    setTimeout(() => {
      this.global.loading.dismiss();
    });
    this.global.showAlert('Error', text);
  }

}

0 个答案:

没有答案