有关Ionic 3中事件的问题

时间:2019-03-19 15:21:11

标签: angular events ionic3

我尝试使用事件库(如会话选项),以便保留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()等中尝试过,但是什么也没发生...

请,预先感谢您的帮助或提示!

1 个答案:

答案 0 :(得分:0)

问题在于创建第三页时,该事件已经发布,并且仅影响已经订阅的元素。您应该在第二页上再次发布它,或者更好的解决方案是将该信息存储在单独的/全局服务中,并在构造函数或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
}