【问题标题】:Ionic cancel hard BACK button override离子取消硬 BACK 按钮覆盖
【发布时间】:2017-12-09 14:57:52
【问题描述】:

存在关于在 Ionic 中覆盖物理 Android BACK 按钮以提供自定义行为的问题:

但是如何取消覆盖以恢复默认行为?


我尝试更改处理程序的优先级,希望默认处理程序可能具有更高的优先级。

var customBackButton = function() {
    console.log("this is custom behaviour");
};
$ionicPlatform.registerBackButtonAction(
    customBackButton, 101
);
$scope.$on('$destroy', function() {
    $ionicPlatform.registerBackButtonAction(
        customBackButton, 0
    );
});

这不起作用。


【问题讨论】:

    标签: ionic-framework ionic


    【解决方案1】:

    Ionic v1 解决方案(已过期)


    根据Ionic docs for $ionicPlatform,registerBackButtonAction() 返回:

    一个函数,在调用时会取消注册这个 backButtonAction。

    这可以在registerBackButtonAction()的代码中看到:

      // return a function to de-register this back button action
      return function() {
        delete self.    [action.id];
      };
    

    所以注销/取消自定义行为的正确方法是在控制器被销毁时调用该函数:

    var customBackButton = function() {
        console.log("this is custom behaviour");
    };
    
    // registerBackButtonAction() returns a function which can be used to deregister it
    var deregisterBackButtonAction = $ionicPlatform.registerBackButtonAction(
        customBackButton, 101
    );
    
    $scope.$on('$destroy', function() {
        deregisterBackButtonAction();
    });
    

    可以在此处找到显示如何覆盖和恢复硬按钮和软按钮的更完整示例:

    【讨论】:

    • 为了完整性 - ionicframework.com/docs/api/directive/ionView - 可以缓存视图,这意味着控制器通常只加载一次,这可能会影响您的控制器逻辑。 - 在 $ionicView.leave 上注销可能是比$destroy 更好的选择
    • @Michal 看起来是一个更好的选择。当然,当视图返回 ... err ... 时,必须在适当的事件中重新注册它。
    • @Mohan - 我不再使用 ionic 了。如果您可以编写更新的 v3 答案来解释这些天如何做,那就太好了。我将更新我的答案以反映它适用于 v1。
    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2015-12-23
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多