离子后退按钮

时间:2016-01-11 21:17:37

标签: android angularjs ionic-framework ionic

我有基本的离子应用程序,我已经禁用了应用程序上的后退按钮,是否有一个原因,后退按钮仍然在Android设备上工作?

我目前正在使用离子视图进行测试。

这是我的代码:

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleDefault();
    }
  });
  $ionicPlatform.registerBackButtonAction(function(e) {
  e.preventDefault();
  }, 101);
})

4 个答案:

答案 0 :(得分:5)

根据离子documentation

  

您的后退按钮操作将覆盖上述每个操作   优先级低于您提供的优先级。

鉴于您希望在所有情况下完全禁用后退按钮,并且引用列表中的操作的最高优先级为500,您应该提供超过500,600的优先级值。放置在$ ionicPlatform.ready()

中时,下面的代码应该有效
 $ionicPlatform.registerBackButtonAction(function(e) {}, 600);

答案 1 :(得分:4)

对于任何试图在Ionic 2上进行排序的人:

http://www.codingandclimbing.co.uk/blog/ionic-2-android-back-button-13

这是实际的帖子信息:

在您的app.ts中,执行以下操作以使后退按钮按预期工作(主要是!):

  initializeApp() {
    this.platform.ready().then(() => {
      this.registerBackButtonListener();
    });
  }

  registerBackButtonListener() {
    document.addEventListener('backbutton', () => {
      var nav = this.getNav();
      if (nav.canGoBack()) {
        nav.pop();
      }
      else {
        this.confirmExitApp(nav);
      }
    });
  }


confirmExitApp(nav) {
    let confirm = Alert.create({
      title: 'Confirm Exit',
      message: 'Really exit app?',
      buttons: [
        {
          text: 'Cancel',
          handler: () => {
            console.log('Disagree clicked');
          }
        },
        {
          text: 'Exit',
          handler: () => {
            navigator.app.exitApp();
          }
        }
      ]
    });
    nav.present(confirm);
  }

  getNav() {
    return this.app.getComponent('nav');
  }

注意:

如果您收到有关应用不属于导航器的属性的错误:

1)在app根目录中添加一个typings文件夹:例如应用/分型

2)添加一个名为: pluginshackyhacky.d.ts

的文件

3)添加为TypeScript扩展所需的属性以进行编译。:

interface /*PhoneGapNavigator extends*/ Navigator {
    app: any;
}

4)将pluginshackyhacky.d.ts添加到 tsconfig.json 中的编译中:

  "files": [
    "app/app.ts",
    "app/typings/pluginshackyhacky.d.ts",
    "app/typings/phonegap.d.ts"
  ]

你可以看到我还包含了phonegap.d.ts文件,其中包含许多缺少的属性/变量,允许TypeScript编译而没有错误。

希望这可以帮助任何人解决这个问题。

干杯。

答案 2 :(得分:1)

这是Ionic 2的解决方案:

constructor(
    public platform: Platform, //Platform controller
    public app: App, //App controller
  ) {
    platform.ready().then(() => {
      StatusBar.styleDefault();
      Splashscreen.hide();

      //Registration of push in Android and Windows Phone
      platform.registerBackButtonAction(() => {
        let nav = this.app.getActiveNav();
        if (nav.canGoBack()){ //Can we go back?
          nav.pop();
        }else{
          this.platform.exitApp(); //Exit from app
        }
      });
    });
  }

答案 3 :(得分:-1)

将优先级从101更改为100以覆盖默认的硬件后退功能。如果您的优先级100已经覆盖了该功能,那么您可以覆盖优先级为101的覆盖,如果这有意义的话。

$ionicPlatform.registerBackButtonAction(function(e) {
    // android hardware back button was hit
}, 100);

以下是现有后退按钮挂钩的所有优先级列表

http://ionicframework.com/docs/api/service/$ionicPlatform/