使用菜单卸载时发生离子意外取消订阅事件

时间:2018-06-26 10:20:20

标签: angular ionic-framework

背景
带有菜单和两个页面(Homelist)的离子应用程序。

Home页在ionViewWillEnter上订阅了一个活动
并在ionViewWillUnload上取消订阅。

正确的情况:
Home启动应用,并预订活动。
如果切换菜单,然后从List中单击Home,则该事件被取消订阅。
重新输入Home,事件已订阅。

错误的情况:
应用以Home开头,并已订阅事件。
切换菜单>单击Home>
控制台:
活动已订阅
取消订阅事件

结果是Home页上未订阅的事件。

需求情况
输入Home(从其他页面输入/从菜单重新输入)>订阅事件一次。
使Home(到其他页面/从菜单重新加载同一页面)取消订阅事件一次。

游乐场
ionic-menu

我希望输入和卸载都带有一对。
如果重新进入同一页面,则应该在进入之前执行卸载。
但是事实并非如此。
请提出一种在离子中正确(取消)订阅事件的方法
谢谢。

1 个答案:

答案 0 :(得分:0)

import { Component, OnInit, OnDestroy } from '@angular/core';
import { NavController, Events } from 'ionic-angular';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage /*implements OnInit, OnDestroy*/ {

  constructor(public navCtrl: NavController,
              public events: Events) {}




  ionViewWillEnter() {
    console.log("ion enter info subscribed");
    this.events.subscribe('get-info');
    this.events.subscribe("value",(data) => {
      console.log("ion enter info subscribed");
    this.events.subscribe('get-info');
    });
  }

  ionViewWillUnload() {
    console.log("ion unload info unsubscribed");
     this.events.publish('value',true)
    this.events.unsubscribe('get-info');

  }