From 7d07991a1fd40ee8d616bfe1c35dbb779e5d9e57 Mon Sep 17 00:00:00 2001 From: Yohan Lasorsa Date: Fri, 24 Feb 2017 10:26:00 +0100 Subject: [PATCH] Allow ion-nav-bar to work in modals --- js/angular/controller/navBarController.js | 10 +++++++++- js/angular/controller/viewController.js | 5 ++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/js/angular/controller/navBarController.js b/js/angular/controller/navBarController.js index 0555816f4..983ea0ebe 100644 --- a/js/angular/controller/navBarController.js +++ b/js/angular/controller/navBarController.js @@ -35,6 +35,11 @@ function($scope, $element, $attrs, $compile, $timeout, $ionicNavBarDelegate, $io $element.addClass('nav-bar-container'); ionic.DomUtil.cachedAttr($element, 'nav-bar-transition', $ionicConfig.views.transition()); + // check if the navbar is within a modal view + var ele = $element[0]; + while((ele = ele.parentNode) && !/ion-modal-view/i.test(ele.tagName)); + self.inModal = !!ele; + // create two nav bar blocks which will trade out which one is shown self.createHeaderBar(false); self.createHeaderBar(true); @@ -372,7 +377,10 @@ function($scope, $element, $attrs, $compile, $timeout, $ionicNavBarDelegate, $io // set non primary to hide second for (var x = 0; x < $ionicNavBarDelegate._instances.length; x++) { - if ($ionicNavBarDelegate._instances[x] !== self) $ionicNavBarDelegate._instances[x].visibleBar(false); + var instance = $ionicNavBarDelegate._instances[x]; + if (instance !== self && self.inModal === instance.inModal) { + instance.visibleBar(false); + } } }; diff --git a/js/angular/controller/viewController.js b/js/angular/controller/viewController.js index c23b3f7d1..9304c7f5e 100644 --- a/js/angular/controller/viewController.js +++ b/js/angular/controller/viewController.js @@ -24,11 +24,10 @@ function($scope, $element, $attrs, $compile, $rootScope) { self.init = function() { deregIonNavBarInit(); - var modalCtrl = $element.inheritedData('$ionModalController'); navViewCtrl = $element.inheritedData('$ionNavViewController'); - // don't bother if inside a modal or there's no parent navView - if (!navViewCtrl || modalCtrl) return; + // don't bother if there's no parent navView + if (!navViewCtrl) return; // add listeners for when this view changes $scope.$on('$ionicView.beforeEnter', self.beforeEnter);