Ionic stateProvider - 动态显示/隐藏后退按钮

时间:2016-03-03 12:51:55

标签: angularjs ionic-framework angular-ui-router

我正在使用Ionic应用程序,并且完全使用工作状态处理左侧菜单。

这是菜单代码:

<ion-side-menu side="left">
    <ion-header-bar class="bar-royal">
        <h1 class="title">Example</h1>
    </ion-header-bar>
    <ion-content>
        <ion-list>
            <ion-item menu-close ng-repeat="test in data"
                      ng-switch="test.ID"
                      ng-href="{{test.ID == 0 ? '#/app/test' : '#/app/details/' + test.iID}}"
                      class="item item-icon-right">
                <div ng-switch-when="0"><span>{{test.Name}}</span></div>    
                <div ng-switch-default><span>{{test.Name}}</span>
                </div>
            </ion-item>
        </ion-list>    
    </ion-content>
</ion-side-menu>

非常基本的设置。

和具有状态的代码(coffescript):

angular.module('hgApp', ['ionic'])
.config [
'$stateProvider'
'$urlRouterProvider'
($stateProvider, $urlRouterProvider) ->
    $stateProvider.state('app',
       url: '/app'
       abstract: true
       templateUrl: './sections/menu/menu.html'
       controller: 'menuList'
    ).state('app.details',
       url: '/details/:testID'
       views:
         'menuContent':
             templateUrl: './sections/details/testDetails.html'
             controller: 'testDetails'

现在,我的问题在这里:

我可以从左侧菜单的列表或我主页上的链接导航到app/details/{testID}

只有当我使用主页上的链接到达页面时,我才需要在app/details/{testID}的顶栏添加一个后退按钮,但如果我从左侧菜单列表到达那里则不行。

菜单列表和主页上的链接都用作href "#/app/details/{{test.ID}}"

我该怎么做?我真的不知道。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

嗨我有类似的情况,如果表格是可编辑的,我必须隐藏按钮,所以我做了以下

<ion-nav-back-button ng-show="!$root.hideBack"></ion-nav-back-button>

Controller.js

$scope.makeEditable = function () {
    $scope.isEditable = true;
    $rootScope.hideBack = true;
};

因此,如果字段可编辑,则后退按钮将消失。我希望这有任何帮助。

另一个例子是:

在致电$ionicHistory之前,在您的控制器中使用$state.go('app.details')。我猜你在主页上有不同的控制器,你使用$stage.go进入详情页面?所以代码应该看起来像

app.controller('HomeCtrl', ["$scope", "$ionicHistory", function($scope, $ionicHistory) {

    $scope.goToDetails = function() {
      $ionicHistory.nextViewOptions({
        disableBack: true
      });
       $state.go('app.details');
    }

}]);

HTML

<button ng-click="goToDetails()"></button>

答案 1 :(得分:0)

顺便提出有趣的问题

我认为你可以使用$ broadcast

完成你想要的行为

基本上你有一个函数,当你点击链接时会调用它来告诉testDetails控制器'嘿,我们来自一个链接,做你的东西'

testDetails控制器将期待此调用并相应地显示按钮

原始代码:

app.controller('AnyCtrl',
 function AnyCtrl ($scope) {
    // Call this code on link click
    $scope.$broadcast('fromlink', 'Some data');
});

app.controller('testDetails',
  function testDetails ($scope) {

  $scope.$on('fromlink', function (event, data) {
    // Add button. Profit
  });

});

您可以在这里找到涵盖所有可能性的小文章的链接

https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/