ionic-angular
Version:
[](https://circleci.com/gh/driftyco/ionic)
110 lines (102 loc) • 4.17 kB
JavaScript
IonicModule
/**
* @ngdoc directive
* @name ionSideMenus
* @module ionic
* @delegate ionic.service:$ionicSideMenuDelegate
* @restrict E
*
* @description
* A container element for side menu(s) and the main content. Allows the left and/or right side menu
* to be toggled by dragging the main content area side to side.
*
* To automatically close an opened menu, you can add the {@link ionic.directive:menuClose} attribute
* directive. The `menu-close` attribute is usually added to links and buttons within
* `ion-side-menu-content`, so that when the element is clicked, the opened side menu will
* automatically close.
*
* "Burger Icon" toggles can be added to the header with the {@link ionic.directive:menuToggle}
* attribute directive. Clicking the toggle will open and close the side menu like the `menu-close`
* directive. The side menu will automatically hide on child pages, but can be overridden with the
* enable-menu-with-back-views attribute mentioned below.
*
* By default, side menus are hidden underneath their side menu content and can be opened by swiping
* the content left or right or by toggling a button to show the side menu. Additionally, by adding the
* {@link ionic.directive:exposeAsideWhen} attribute directive to an
* {@link ionic.directive:ionSideMenu} element directive, a side menu can be given instructions about
* "when" the menu should be exposed (always viewable).
*
* 
*
* For more information on side menus, check out:
*
* - {@link ionic.directive:ionSideMenuContent}
* - {@link ionic.directive:ionSideMenu}
* - {@link ionic.directive:menuToggle}
* - {@link ionic.directive:menuClose}
* - {@link ionic.directive:exposeAsideWhen}
*
* @usage
* To use side menus, add an `<ion-side-menus>` parent element. This will encompass all pages that have a
* side menu, and have at least 2 child elements: 1 `<ion-side-menu-content>` for the center content,
* and one or more `<ion-side-menu>` directives for each side menu(left/right) that you wish to place.
*
* ```html
* <ion-side-menus>
* <!-- Left menu -->
* <ion-side-menu side="left">
* </ion-side-menu>
*
* <ion-side-menu-content>
* <!-- Main content, usually <ion-nav-view> -->
* </ion-side-menu-content>
*
* <!-- Right menu -->
* <ion-side-menu side="right">
* </ion-side-menu>
*
* </ion-side-menus>
* ```
* ```js
* function ContentController($scope, $ionicSideMenuDelegate) {
* $scope.toggleLeft = function() {
* $ionicSideMenuDelegate.toggleLeft();
* };
* }
* ```
*
* @param {bool=} enable-menu-with-back-views Determines whether the side menu is enabled when the
* back button is showing. When set to `false`, any {@link ionic.directive:menuToggle} will be hidden,
* and the user cannot swipe to open the menu. When going back to the root page of the side menu (the
* page without a back button visible), then any menuToggle buttons will show again, and menus will be
* enabled again.
* @param {string=} delegate-handle The handle used to identify this side menu
* with {@link ionic.service:$ionicSideMenuDelegate}.
*
*/
.directive('ionSideMenus', ['$ionicBody', function($ionicBody) {
return {
restrict: 'ECA',
controller: '$ionicSideMenus',
compile: function(element, attr) {
attr.$set('class', (attr['class'] || '') + ' view');
return { pre: prelink };
function prelink($scope, $element, $attrs, ctrl) {
ctrl.enableMenuWithBackViews($scope.$eval($attrs.enableMenuWithBackViews));
$scope.$on('$ionicExposeAside', function(evt, isAsideExposed) {
if (!$scope.$exposeAside) $scope.$exposeAside = {};
$scope.$exposeAside.active = isAsideExposed;
$ionicBody.enableClass(isAsideExposed, 'aside-open');
});
$scope.$on('$ionicView.beforeEnter', function(ev, d) {
if (d.historyId) {
$scope.$activeHistoryId = d.historyId;
}
});
$scope.$on('$destroy', function() {
$ionicBody.removeClass('menu-open', 'aside-open');
});
}
}
};
}]);