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