Ionic 3 中的事件问题
Issue with events in Ionic 3
我尝试像会话选项一样使用事件库,这样我就可以保留 id 用户等
当我执行登录过程并转到主页或第二页时它工作正常,但是当我想转到第三页时,我错过了值,我想知道这个问题是否很常见或者我需要更新我的代码
在三个页面上:
import { Events } from 'ionic-angular';
并进入主要 class:
构造函数( public 事件:事件,....
在 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() 等中尝试过,但没有任何反应...
请提前感谢您的帮助或提示!
问题是在创建第三页时,事件已经发布,只影响已经订阅的元素。您应该在第二页上再次发布它,或者更好的解决方案是将此信息存储在 separate/global 服务中并在构造函数或 ionViewWillEnter 方法上访问此信息。
编辑
您有两个选择:
1) 使用本地存储
2) 使用提供者存储变量
1) 使用本地存储:
从 Ionic Native
安装 Storage
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
}
我尝试像会话选项一样使用事件库,这样我就可以保留 id 用户等 当我执行登录过程并转到主页或第二页时它工作正常,但是当我想转到第三页时,我错过了值,我想知道这个问题是否很常见或者我需要更新我的代码
在三个页面上:
import { Events } from 'ionic-angular';
并进入主要 class:
构造函数( public 事件:事件,....
在 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() 等中尝试过,但没有任何反应...
请提前感谢您的帮助或提示!
问题是在创建第三页时,事件已经发布,只影响已经订阅的元素。您应该在第二页上再次发布它,或者更好的解决方案是将此信息存储在 separate/global 服务中并在构造函数或 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
}