Ionic 3 Local Notification толкает на определенную страницу слишком много раз - PullRequest
0 голосов
/ 14 мая 2018

Я новичок в 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');
  }
}

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Я решил проблему. Предыдущий ответ правильный, я должен подписаться только один раз, но сначала я должен проверить, готова ли платформа, в противном случае Cordova выдаст мне ошибку и приложение не будет работать.

Это код

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',

        })
      })
  }
}
0 голосов
/ 10 декабря 2018

Вы можете сделать это, это работает как шарм.

      createLocalNotification(options: any) {
        // Schedule a single notification
        this.localNotifications.schedule(options);
        // Subscribe to onClick event
        let observable = this.localNotifications.on('click').subscribe((data) => {
          this.navCtrl.push(Page2Page);
          // Unsubscribe to OnClick event after push your page
          observable.unsubscribe();
        });
      }
0 голосов
/ 14 мая 2018

Вы подписываетесь на событие каждый раз, когда нажимаете. Когда вы подписываетесь, вы не отменяете и предыдущую подписку. Вам нужно либо удалить предыдущую подписку, либо не подписывать каждый клик. Попробуйте следующее.

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.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',

        })


      })
  }

}

Я перенес подписку на localNotifications в конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...