Ионные открыть страницу или вкладку из компонента и запустить функцию - PullRequest
0 голосов
/ 20 октября 2018

Я борюсь со следующей проблемой.В моем приложении Ionic (3).Я получил скрипт обработки push-уведомлений oneSignal в моем файле app.component.ts.Я использую функцию handleNotificationOpened().subcribe, чтобы иметь возможность открывать страницу или запускать функцию, когда пользователь нажимает push-уведомление.

Теперь мой вопрос: как я могу изменить вкладку или страницу из app.component.ts и запустить функцию, специфичную для страницы, при открытии этой вкладки / страницы.

Например:

  • Пользователь получает уведомление о получении нового приглашения на дружбу.
  • Пользователь нажимает push-уведомление
  • Приложение откроет вкладку «Список друзей» и откроет конкретное приглашение.

1 Ответ

0 голосов
/ 04 ноября 2018

Для людей, имеющих один и тот же вопрос, я нашел решение, используя события.Возможно, это не лучшее решение, но оно работает.

Сначала необходимо добавить следующие компоненты на страницу .ts

import { Events } from 'ionic-angular';
import { App } from 'ionic-angular';

Следующая функция срабатывает, когда пользователь нажимает push-уведомление, используяOneSignal.

this.oneSignal.handleNotificationOpened().subscribe((data) => {
    // do something when a notification is opened

    // the following two lines pass data I send with the push notification so the app knows what to open
    let pushaction = data.notification.payload.additionalData.action;
    let pushactionvalue = data.notification.payload.additionalData.actionvalue;

    // this fires up the tab-switching
    this.runNotificationAction(pushaction, pushactionvalue);

});

Следующая функция направляет пользователя на правую вкладку

runNotificationAction(pushaction, pushactionvalue){

    // this is the data passed the the other page
    let data = {"action": pushaction, "value:": pushactionvalue};

    // this opens the right tab. Make sure to change select '0' to the required tab (0 is the first one). 
    this.app.getRootNav().getActiveChildNav().select(0);

    // fires the function that passed the data. Using second parameter to filter event listeners per page. 
    this.sendData(data, 'homepage');    
} 

И функцию, которая передает данные на другие страницы:

sendData(data, command){
    //We set a timeout because I had problems with sending it imediatly. Like this it works fine for me.
    setTimeout(() => {
        let pushcommand = "pushData:" + command ;
        this.events.publish(pushcommand, data);
    }, 500);
}

И наконец, мы должны добавить прослушиватель событий на другие вкладки / страницы, на которые вы будете перенаправлять.

// making an event listerner command for each page like pushData:homepage makes sure the action is only fired from the specific page
this.events.subscribe('pushData:homepage', (data) => {
    console.log('Yes, data passed!');
    console.log(data);
   // Then you can fire your function and use the data
});

Если у кого-то есть какие-либо вопросы, не стесняйтесь задавать!

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