2017-02-13 9 views
0

Мне нравится скрывать и показывать значки в зависимости от вида. Что я не могу сделать, потому что ion-nav-bar осуществляется доступ только из tabsCtrlПоказать/скрыть кнопки в «ion-nav-bar» относительно вида

Вот вид разметки:

<ion-nav-bar class="bar-stable"> 
    <ion-nav-back-button> </ion-nav-back-button> 
    <ion-nav-title>My App Title</ion-nav-title> 
    <ion-nav-buttons side="right"> 
    <button class="button icon ion-ios-information-outline" ng-click="openFaqModal()" ng-hide="showHideFAQ"></button> 
    <button class="button icon ci-bookmark" ng-click="openBoookmarkModal()" ng-show="showHideBookmark"></button> 
    </ion-nav-buttons> 
</ion-nav-bar> 

Вот контроллер:

// Tab Controller - *** This Work *** 
.controller('TabCtrl', function ($scope) { 
    $rootScope.showHideFAQ = true; 
    $rootScope.showHideBookmark = true; 
}) 

// Detail Controller - *** This do not work *** 
.controller('DetailCtrl', function ($scope) { 
    $rootScope.showHideFAQ = true; 
    $rootScope.showHideBookmark = true; 
}) 

Вот Маршрут:

// setup an abstract state for the tabs directive 
.state('tab', { 
    url: '/tab', 
    abstract: true, 
    templateUrl: 'views/tabs.html', 
    controller: 'TabCtrl' 
}) 

.state('tab.detail', { 
    url: '/resources/:resourcesId', 
    views: { 
    'tab-resources': { 
     templateUrl: 'views/detail.html', 
     controller: 'DetailCtrl' 
    } 
    } 
}) 

Я не уверен, почему он работает в «TabCtrl», но не в «Deta ilCtrl ", так как оба контроллера загружаются в один вид. Я сомневаюсь, что это как-то связано с scope.

+0

я думаю, что вы пропустите впрыснуть ** $ rootScope ** в обоих контроллера, и как только вы установите значение в $ ** ** rootScope будет остаются такими же в течение всего сеанса приложения. – Naitik

+0

@Naitik Я пробовал это уже, но, как уже упоминалось, 'TabCtrl' доступен во всех представлениях, я не могу сбросить его, как только он войдет в желаемый вид. – Syed

+0

затем используйте ** $ localStorage ** вместо ** $ rootScope ** – Naitik

ответ

0

Я использую $ionicView.enter и $ionicView.leave решить мою проблему:

// Detail Controller 
.controller('DetailCtrl', function ($scope, $ionicView) { 
    // Show Bookmark and Hide FAQ icon 
    $scope.$on('$ionicView.enter', function() { 
    $rootScope.showHideFAQ = true; 
    $rootScope.showHideBookmark = true; 
    }); 

    // Hide Bookmark and Show FAQ icon 
    $scope.$on('$ionicView.leave', function() { 
    $rootScope.showHideFAQ = false; 
    $rootScope.showHideBookmark = false; 
    }); 
})