Ionic2 导航到推送通知有效负载上发送的路由

Ionic2 导航到推送通知有效负载上发送的路由,ionic2,Ionic2,我有一个ionic2应用程序接收来自ionic.io的推送通知。在通知有效负载上,我正在发送要导航到的所需路径 let route = notification.payload.route; if (route) { that.navCtrl.push(route, notification.payload); } 问题在于,有效负载以字符串的形式出现,而navCtrl希望接收路由值。与此导入的myPage类似: import { myPage } from '../pages.ts';

我有一个ionic2应用程序接收来自ionic.io的推送通知。在通知有效负载上,我正在发送要导航到的所需路径

let route = notification.payload.route;

if (route) {
  that.navCtrl.push(route, notification.payload);
}
问题在于,有效负载以字符串的形式出现,而navCtrl希望接收路由值。与此导入的myPage类似:

import { myPage } from '../pages.ts';

转换字符串的最佳方法是什么?或者如果有更好的方法,也可以随意提及。谢谢。

如果导航选项有限,您可以使用开关将用户发送到页面,如:

let route = notification.payload.route;

if (route) {
  switch(route){
    case 'home':
      that.navCtrl.push(MyHomePage, notification.payload);
      break;

    case 'Users':
      that.navCtrl.push(MyUsersPage, notification.payload);
      break;

    case ...
  }
}
这不是最漂亮的方式,但应该有效

编辑-离子3延迟加载方式 因此,由于您只想使用包含页面选择器的字符串,我认为您能够做到这一点的唯一方法是使用延迟加载组件

在开始之前,如果您的项目不在爱奥尼亚3上,请按照以下步骤进行升级

1) 您需要从
app.module.ts
entryComponents
declatarions
中删除您想要懒洋洋加载的页面,当然,还需要删除页面导入。 所以从这个

import { HomePage } from '../pages/home';

@NgModule({
  declarations: [
    MyApp, HomePage
  ],
  imports: [
    ...
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp, HomePage
  ],
  providers: [
    ...
  ]
})
看起来是这样的:

@NgModule({
  declarations: [
    MyApp
  ],
  imports: [
    ...
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp
  ],
  providers: [
    ...
  ]
})
2) 在每个延迟加载的文件夹上都有3个文件,如

-home
|- home.html
|- home.scss
|- home.ts
您需要创建另一个文件,即
home.module.ts

3) 在您的
home.module.ts上,您将需要此代码

import { NgModule } from '@angular/core';
import { HomePage } from './home';
import { IonicPageModule } from 'ionic-angular';

@NgModule({
    declarations: [HomePage],
    imports: [IonicPageModule.forChild(HomePage)],
})
export class HomePageModule { }
4) 在您的
home.ts
上,您需要导入
IonicPage
decorator,并在
@组件上使用它

import { IonicPage } from 'ionic-angular';

@IonicPage()
@Component({
    selector: 'home',
    templateUrl: 'home.html'
})
5) 现在,您已经准备好使用延迟加载,不再需要导入页面,然后在推/弹出页面时使用它,您需要将其作为字符串传递。 因此,如果您使用
this.navCtrl.push(主页、数据)
现在您可以使用
this.navCtrl.push('HomePage',data)并让深度链接为您解决这一问题

如果您需要更多信息,请参阅本文,了解如何实现此功能,但据我所知,这是使用传递字符串值的路由的唯一方法


希望这有帮助:)

如果导航选项有限,您可以使用开关将用户发送到页面,如:

let route = notification.payload.route;

if (route) {
  switch(route){
    case 'home':
      that.navCtrl.push(MyHomePage, notification.payload);
      break;

    case 'Users':
      that.navCtrl.push(MyUsersPage, notification.payload);
      break;

    case ...
  }
}
这不是最漂亮的方式,但应该有效

编辑-离子3延迟加载方式 因此,由于您只想使用包含页面选择器的字符串,我认为您能够做到这一点的唯一方法是使用延迟加载组件

在开始之前,如果您的项目不在爱奥尼亚3上,请按照以下步骤进行升级

1) 您需要从
app.module.ts
entryComponents
declatarions
中删除您想要懒洋洋加载的页面,当然,还需要删除页面导入。 所以从这个

import { HomePage } from '../pages/home';

@NgModule({
  declarations: [
    MyApp, HomePage
  ],
  imports: [
    ...
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp, HomePage
  ],
  providers: [
    ...
  ]
})
看起来是这样的:

@NgModule({
  declarations: [
    MyApp
  ],
  imports: [
    ...
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp
  ],
  providers: [
    ...
  ]
})
2) 在每个延迟加载的文件夹上都有3个文件,如

-home
|- home.html
|- home.scss
|- home.ts
您需要创建另一个文件,即
home.module.ts

3) 在您的
home.module.ts上,您将需要此代码

import { NgModule } from '@angular/core';
import { HomePage } from './home';
import { IonicPageModule } from 'ionic-angular';

@NgModule({
    declarations: [HomePage],
    imports: [IonicPageModule.forChild(HomePage)],
})
export class HomePageModule { }
4) 在您的
home.ts
上,您需要导入
IonicPage
decorator,并在
@组件上使用它

import { IonicPage } from 'ionic-angular';

@IonicPage()
@Component({
    selector: 'home',
    templateUrl: 'home.html'
})
5) 现在,您已经准备好使用延迟加载,不再需要导入页面,然后在推/弹出页面时使用它,您需要将其作为字符串传递。 因此,如果您使用
this.navCtrl.push(主页、数据)
现在您可以使用
this.navCtrl.push('HomePage',data)并让深度链接为您解决这一问题

如果您需要更多信息,请参阅本文,了解如何实现此功能,但据我所知,这是使用传递字符串值的路由的唯一方法


希望这有帮助:)

谢谢你的建议,加布里埃尔。这会起作用,但我试图避免自己硬编码值。我希望通知能够动态地控制它。感谢@GabrielWabiz,我相信这可以满足我的需要,但现在太多了,我会同意你最初的建议,使用开关。谢谢。@GabrielBarreto,当我点击通知并打开应用程序时,这不起作用。谢谢你的建议,Gabriel。这会起作用,但我试图避免自己硬编码值。我希望通知能够动态地控制它。感谢@GabrielWabiz,我相信这可以满足我的需要,但现在太多了,我会同意你最初的建议,使用开关。谢谢。@GabrielBarreto,当我点击通知并打开应用程序时,这不起作用。