我尝试使用事件库(如会话选项),以便保留id用户等 当我执行登录过程并转到首页或第二页时,它工作正常,但是当我要转到第三页时,我错过了值,我想知道这个问题是否普遍,或者我需要更新我的代码
在三个页面上:
import { Events } from 'ionic-angular';
进入主类:
constructor(公开事件:Events .....
在1页中:
登录功能,处理正常:
this.navCtrl.push('PanelPage').then(() => {
this.events.publish('usuario', usuario['Nombre']);
this.events.publish('usuario_id', usuario['Id']);
this.events.publish('usuario_rol', usuario['Roles']);
//console.log('Published');
});
2页(可以正常工作)
constructor( public events: Events,public navCtrl: NavController, public navParams: NavParams) {
this.events.subscribe('usuario', (user) => {
console.log('user name:', user)
});
this.events.subscribe('usuario_id', (user_id) => {
console.log('id de user name:', user_id)
});
this.events.subscribe('usuario_rol', (user_rol) => {
console.log('rol de user en panel:', user_rol)
this.usuario_rol = user_rol;
3页(我看不到事件):
constructor( public cdr: ChangeDetectorRef,public navCtrl: NavController, public navParams: NavParams, public events: Events, private toastCtrl: ToastController, public plt: Platform,public sqlite: SQLite, public formBuilder: FormBuilder, private sqliteService:SqLiteProvider)
{
this.events.subscribe('usuario_rol', (user_rol: any) => {
console.log('Rol en preventa:', user_rol);
this.usuario_rol = user_rol;
});
我在构造函数,ionViewWillEnter()等中尝试过,但是什么也没发生...
请,预先感谢您的帮助或提示!
答案 0 :(得分:0)
问题在于创建第三页时,该事件已经发布,并且仅影响已经订阅的元素。您应该在第二页上再次发布它,或者更好的解决方案是将该信息存储在单独的/全局服务中,并在构造函数或ionViewWillEnter方法上访问此信息。
修改
您有两个选择:
1)使用本地存储
2)使用提供程序来存储变量
1)使用本地存储:
从Ionic Native
import { Storage } from '@ionic-native/storage';
constructor(private storage: Storage){}
this.navCtrl.push('PanelPage').then(() => {
this.storage.set('usuario', usuario['Nombre']);
this.storage.set('usuario_id', usuario['Id']);
this.storage.set('usuario_rol', usuario['Roles']);
});
在第二页和第三页上:
import { Storage } from '@ionic-native/storage';
constructor(private storage: Storage){}
ionViewWillEnter() {
this.usuario_rol = await this.storage.get('usario_rol');
}
2)使用提供程序来存储变量
ionic g provider global
providers / global / global.ts
import { Injectable } from '@angular/core';
@Injectable()
export class GlobalProvider {
usuario: any;
usuario_id: any;
usuario_rol: any;
constructor() {}
}
在第一页上:
import { GlobalProvider } from '../../providers/global/global';
constructor(private global: GlobalProvider){}
this.navCtrl.push('PanelPage').then(() => {
this.global.usuario = usuario['Nombre'];
this.global.usuario_id = usuario['Id'];
this.global.usuario_rol = usuario['Roles'];
});
第二页和第三页:
import { GlobalProvider } from '../../providers/global/global';
constructor(private global: GlobalProvider){}
ionViewWillEnter() {
this.usuario_rol = this.global.usuario_rol
}