如何覆盖离子

时间:2016-03-23 05:30:31

标签: angularjs ionic-framework ionic-view

我有三个观看播放列表,播放列表和媒体播放器。

在我的项目中,我默认返回按钮。我正在调试一个游戏商店应用我的方向查看页面是播放列表 - >播放列表 - >媒体播放器。我也有单独的控制器,所有那里的视图,但我只在播放列表和媒体播放器页面中获得默认后退按钮。

1)。点击播放列表页面中的后退按钮进入播放列表页面,这样就没有问题了。

2)。点击媒体播放器页面中的后退按钮进入播放列表页面,但我需要转到播放列表。

这里我有一些链接,我已经通过,但我无法理解

Soft navigation bar button - override $rootScope.$ionicGoBack()
Hard Android button - use $ionicPlatform.registerBackButtonAction()

1)。Ionic override all BACK button behaviour for specific controller 2)。https://github.com/driftyco/ionic/issues/399
3)。https://forum.ionicframework.com/t/how-to-handle-a-click-on-the-generated-back-button/582

请一些人解释一下覆盖$ ionicGoBack()。在我的情况下如何找到天气它是软导航栏按钮或硬Android按钮。

当我在页面媒体播放器上的后退按钮上给出检查元素时,我得到了这个

<button ng-click="$ionicGoBack()" class="button back-button buttons button-clear header-item" tabindex="0">
       <i class="icon ion-ios-arrow-back"></i> 
      <span class="back-text" style="transform: translate3d(0px, 0px, 0px);">
      <span class="default-title">Back</span>
      <span class="previous-title hide">Home</span>
     </span></button>

1 个答案:

答案 0 :(得分:3)

我将在

中提及我的回答
  

可以覆盖控制器中的两个按钮,而无需更改HTML代码。

     

总结:

     
      
  • 软导航栏按钮 - 覆盖$rootScope.$ionicGoBack()
  •   
  • 硬Android按钮 - 使用$ionicPlatform.registerBackButtonAction()
  •   

在您的情况下,您想知道$ionicGoBack()是软还是硬后退按钮。如上所述,&#34; 软导航栏按钮&#34;由这种方法处理。

&#34; 硬Android按钮&#34;由不同的方法处理:registerBackButtonAction()

如果我理解正确,您希望覆盖Media Player页面上的所有后退行为,并将用户发送到播放列表页面,即您只想返回1级(这将是正常的Android行为)。

这需要覆盖两个按钮,这是我在链接上解释的更多信息。

我创建了一个名为doCustomBack()的新方法,该方法由两个被覆盖的处理程序调用。这是您要用于导航到播放列表页面的方法:

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

下面的代码会覆盖默认的软按钮,指向新的doCustomBack()方法:

// 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();
});

See my original answer for a different explanation,以及更多相关资源的链接。