Ionic2 Ionic 2取消硬回按钮超控->;当用户位于某个主选项卡页面上时,关闭“后退”按钮上的应用程序

Ionic2 Ionic 2取消硬回按钮超控->;当用户位于某个主选项卡页面上时,关闭“后退”按钮上的应用程序,ionic2,Ionic2,如果用户位于两个主页中的一个,我希望使用android后退按钮关闭应用程序。这两个页面都可以通过两个选项卡按钮导航到,这两个选项卡都显示在这两个页面上。但是在任何其他页面上,我希望保持正常的堆栈页面行为 我在这本书里读到了,也得到了一些信息 我创建了一个自定义行为来关闭应用程序: private registerSpecificActionOnBackButton = () => { if(this.platform.is('android')||this.platform.is('w

如果用户位于两个主页中的一个,我希望使用android后退按钮关闭应用程序。这两个页面都可以通过两个选项卡按钮导航到,这两个选项卡都显示在这两个页面上。但是在任何其他页面上,我希望保持正常的堆栈页面行为

我在这本书里读到了,也得到了一些信息

我创建了一个自定义行为来关闭应用程序:

private registerSpecificActionOnBackButton = () => {
  if(this.platform.is('android')||this.platform.is('windows')){
    this.platform.registerBackButtonAction(function(e){
      this.platform.exitApp();
    }.bind(this),101);
  }
}
我的想法是在需要此行为的页面上调用
ionViewWillEnter()
函数中的
RegisterSpecificationOnBackButton()

但是我无法使用
取消注册SpecificationOnBackButton()
函数来取消
ionViewWillLeave()
函数上的行为,我尝试了其他方法:

private deRegisterSpecificActionOnBackButton = () => {
  if(this.platform.is('android')||this.platform.is('windows')){
    this.platform.registerBackButtonAction(function(e){return true},101);
  }
}


但我碰巧被卡住了。有人知道取消自定义注册表BackButtonAction的方法吗?

我成功地做到了我所期望的:当应用程序位于可以通过tabs菜单访问的页面上时,当按下back按钮(在Android上)时,它会关闭。

首先,暂时忘记注册表BackButtonAction()
,因为引用中的说明:

它建议不要试图覆盖默认的后退按钮行为

所以我一直在寻找其他解决方案。我找到了一个不是很干净但很有效的

首先,我查看是否可以使用
navcontroller
使用
remove(startIndex、removeCount、opts)
重置堆栈。但这不起作用,因为两个主页嵌入在选项卡页面中(如图所示)

因此,当您在其中一个页面上时,
NavController
是一个
选项卡
,它的
父项
是一个
选项卡

选项卡中
有一个名为
的数组变量\u selectHistory
\u selectHistory
数组似乎具有与堆栈类似的角色。因此,当使用两个选项卡按钮从一个页面导航到另一个页面时,可以在
console.info(该页面的[NavControler var].parent.\u selectHistory)
中看到,当交替点击选项卡按钮时,数组会增加。当在真实设备上进行尝试时,后退按钮会让你从一个页面切换到另一个页面,直到阵列为空,然后点击下一个后退按钮关闭应用程序

因此我想:让我们看看如果我重写该数组的值会发生什么。无法通过应用于
选项卡
对象的函数来完成此操作(与
导航控制器
的功能不同)

因此,在关于选项卡页面中嵌入的页面的页面中,我在ionViewWillEnter()中添加了以下内容:

This.navCtrl
是在页面的构造函数中传递的我的NavController对象

就这样

private deRegisterSpecificActionOnBackButton = () => {
  if(this.platform.is('android')||this.platform.is('windows')){
    this.platform.registerBackButtonAction(function(event){event.unbind()},101);
  }
}
ionViewWillEnter(){
   this.navCtrl.parent._selectHistory=[];
}