首页 > 解决方案 > Ionic 3 Local Notification 太多次推送到特定页面

问题描述

我是 Ionic 的新手,我可能错过了开发一个简单应用程序的一些重要细节,该应用程序应该通过打开本地通知显示特定页面。问题是:我制作了一个按钮,通过单击它来生成本地通知。如果我第一次生成通知然后单击它,它就像一个魅力,但是当我生成第二个通知时,如果我单击它,应用程序会推送两次新页面,第三次推送三次以此类推,即使我通过导航栏回到根页面。

有人可以帮助我理解我做错了什么?太感谢了

这是根页面的代码

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { LocalNotifications } from '@ionic-native/local-notifications';
import { Platform } from 'ionic-angular';
import { Page2Page } from '../page2/page2';


@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {


  constructor(public navCtrl: NavController, private localNotifications: LocalNotifications, public platform: Platform) {

  }

  click(){

      this.platform.ready().then(()=>{

        this.localNotifications.schedule({
          id: 1 ,
          title: 'Notifica',
          text: 'Single ILocalNotification',

        })

        this.localNotifications.on('click').subscribe(()=>{

          console.log("Notification Subscribed")
          this.navCtrl.push(Page2Page);

        })
      })
  }

}

这是第二页(实际上什么也没做)

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';

/**
 * Generated class for the Page2Page page.
 *
 * See https://ionicframework.com/docs/components/#navigation for more info on
 * Ionic pages and navigation.
 */

@IonicPage()
@Component({
  selector: 'page-page2',
  templateUrl: 'page2.html',
})
export class Page2Page {

  constructor(public navCtrl: NavController, public navParams: NavParams) {
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad Page2Page');
  }
}

标签: angularcordovatypescriptionic-framework

解决方案


我解决了这个问题。前面的答案是对的,我只需要订阅一次,但首先我必须检查平台是否准备就绪,否则科尔多瓦会给我一个错误,应用程序将无法运行。

这是代码

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { LocalNotifications } from '@ionic-native/local-notifications';
import { Platform } from 'ionic-angular';
import { Page2Page } from '../page2/page2';


@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  constructor(public navCtrl: NavController,
    private localNotifications: LocalNotifications,
    public platform: Platform) {

      this.platform.ready().then(()=>{

        this.localNotifications.on('click').subscribe(()=>{

        console.log("Notification Subscribed")
        this.navCtrl.push(Page2Page);

        })
      })
  }


  click(){

      this.platform.ready().then(()=>{

        this.localNotifications.schedule({
          id: 1 ,
          title: 'Notifica',
          text: 'Single ILocalNotification',

        })
      })
  }
}

推荐阅读