Проблема с событиями в Ionic 3 - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь использовать библиотеку событий как параметр сеанса, чтобы я мог сохранить пользователя id и т. Д. Это работает нормально, когда я делаю процесс входа и захожу на домашнюю или вторую страницу, но когда я хочу перейти на третью страницу, я пропускаю значение, я хотел бы знать, является ли эта проблема распространенной, или мне нужно обновить что-то в моем коде

На трех страницах:

import { Events } from 'ionic-angular';

и в основной класс:

конструктор (публичные мероприятия: События, ....


На 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 голосов
/ 19 марта 2019

Проблема в том, что при создании третьей страницы событие уже опубликовано и влияет только на уже подписанные элементы. Вам следует либо снова опубликовать его на второй странице, либо лучшим решением было бы сохранить эту информацию в отдельной / глобальной службе и получить доступ к этой информации в конструкторе или в методе ionViewWillEnter.

Редактировать

У вас есть два варианта:

1) Использовать локальное хранилище
2) Используйте провайдера для хранения переменных

1) Использовать локальное хранилище:
Установите Storage от 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

провайдеры / глобальные / 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...