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
}