【问题标题】:Ionic: How to override back button function?离子:如何覆盖后退按钮功能?
【发布时间】:2015-08-27 20:25:59
【问题描述】:

我需要覆盖两个按钮的后退按钮功能:

  • 导航栏左上角的后退图标
  • 硬件后退按钮(例如在 android 中)

但仅针对一种特定视图,而不是全局视图。我该怎么做?

【问题讨论】:

  • 在主视图时导航栏上的后退按钮不应该存在。所以我不需要覆盖导航栏的返回功能。

标签: ionic-framework ionic


【解决方案1】:

可以在控制器内覆盖两个按钮的后退按钮功能。这是代码:

// run this function when either hard or soft back button is pressed
var doCustomBack = function() {
    console.log("custom BACK");
};

// override soft back
// framework calls $rootScope.$ionicGoBack when soft back button is pressed
var oldSoftBack = $rootScope.$ionicGoBack;
$rootScope.$ionicGoBack = function() {
    doCustomBack();
};
var deregisterSoftBack = function() {
    $rootScope.$ionicGoBack = oldSoftBack;
};

// override hard back
// registerBackButtonAction() returns a function which can be used to deregister it
var deregisterHardBack = $ionicPlatform.registerBackButtonAction(
    doCustomBack, 101
);

// cancel custom back behaviour
$scope.$on('$destroy', function() {
    deregisterHardBack();
    deregisterSoftBack();
});

确保将$rootScope 注入控制器。


有关更多详细信息和正确解释,请参阅我在相关问题中的完整答案:

【讨论】:

    【解决方案2】:

    这段代码是针对android按钮的,而导航栏上的按钮更简单一些:

    Android 按钮:

    $ionicPlatform.registerBackButtonAction(function (event) {
      if($state.current.name=="home"){
        alert("button back");
      }
    }, 100);
    

    离子按钮:

    您可以编辑您的主题并查看您是如何定义您的菜单和视图的?

    【讨论】:

    • 请注意,此方法返回“一个函数,该函数在调用时将取消注册此 backButtonAction。”有关取消自定义后退按钮行为的更多信息,请参阅此问题:Ionic cancel BACK button override
    • 这不适用于IOS!并且仅适用于硬件后退按钮..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2021-01-02
    • 2018-05-03
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多