如何在Ionic

时间:2017-06-14 10:05:42

标签: angularjs cordova ionic-framework

我已经为$ionicPlatform.registerBackButtonAction中的所有状态编写了app.run()。所以当app初始化时,它会为所有页面注册后退按钮。现在我想要更改控制器中特定页面的硬件后退按钮功能。那页。如何在不重新注册所有其他页面的情况下做到这一点。

 $ionicPlatform.registerBackButtonAction(function() {
        if ($state.current.name == 'app.homepage' || $state.current.name == 'app.loginUser') {
            navigator.app.exitApp();
        } else if ($state.current.name == "app.contacts" || $state.current.name == 'app.carDocuments' || $state.current.name == 'app.tracking' || $state.current.name == 'app.logBook'|| $state.current.name == 'app.geofence' || $state.current.name == 'app.walktocar' || $state.current.name == 'app.dashboard' || $state.current.name == 'app.geofenceTest' || $state.current.name == 'app.settings' || $state.current.name == 'app.about' || $state.current.name == 'app.tripDetail' ||      $state.current.name == 'app.newTripDetail'|| $state.current.name == 'app.followMeTrack' || $state.current.name == 'app.followMe' || $state.current.name == 'app.maintainance' || $state.current.name == 'app.faultHistory' || $state.current.name == 'app.routeType'|| $state.current.name == 'app.poi') {
            if ($rootScope.isDeletePage == "true") {
                $rootScope.$broadcast('callOriginalView');
                $rootScope.isDeletePage = "false";
            } else {
                $ionicHistory.nextViewOptions({
                    disableBack: true
                });

                $state.go('app.homepage');
            }

        } else {
            $ionicHistory.goBack();
        }
    }, 100);

因此,如果我再次编写$ ionicPlatform.registerBackButtonAction,那么我必须再次编写所有这些代码进行注册。我怎样才能覆盖特定页面的后退按钮,只有他的控制器

1 个答案:

答案 0 :(得分:0)

通常,我们不应覆盖默认操作,但如果您想更改其功能,请确保使用该功能执行单一功能。

  // Disable BACK button on home
  $ionicPlatform.registerBackButtonAction(function (event) {
    if($state.current.name=="app.home"){ // here instead of "app.home" mention state name of particular page
      //navigator.app.exitApp(); // this is for exiting app
      // write your code that you wish to do
      event.preventDefault() // do nothing
    }
    else if($state.current.name=="app.settings"){ 

      // write your code that you wish to do

    }
    else if($state.current.name=="app.contact"){ 

      // write your code that you wish to do

    }
    else {
      navigator.app.backHistory();
    }
  }, 100);

如果您希望在每个页面中执行不同的操作,请使用服务中的功能,并通过传递回调函数等配置从不同的控制器中调用它。因此,您无需在每个控制器中注册