Close menu when user selects item

This commit is contained in:
Joe Fiorini
2015-05-28 18:09:25 -04:00
parent 77d38b0455
commit 1a5b04c7ee
4 changed files with 63 additions and 9 deletions

View File

@@ -11,7 +11,7 @@
transition: height 0.5s ease-out; transition: height 0.5s ease-out;
justify-content: flex-start; justify-content: flex-start;
flex-direction: column; flex-direction: column;
height: 56px; height: 58px;
overflow: hidden; overflow: hidden;
&.Menu--open { &.Menu--open {

View File

@@ -3,10 +3,43 @@
export default function() { export default function() {
return { return {
restrict: 'E', restrict: 'E',
controllerAs: 'mainMenu',
templateUrl: '/static/js/main-menu/main-menu.partial.html', templateUrl: '/static/js/main-menu/main-menu.partial.html',
controller: ['$scope', function($scope) {
this.open = function() {
$scope.isOpen = true;
};
this.close = function() {
$scope.isOpen = false;
};
this.toggle = function() {
$scope.isOpen = !$scope.isOpen;
};
$scope.isOpen = false;
}],
scope: { scope: {
menuStyle: '&menuStyle', menuStyle: '&menuStyle',
currentUser: '=' currentUser: '='
},
link: function(scope, element, attrs) {
scope.menuStyleClassName = 'blah';
scope.$watch(function() {
return scope.$eval(scope.menuStyle);
}, function(newValue) {
scope.menuStyleClassName = 'MainMenu--' + newValue;
});
scope.$watch('isOpen', function(isOpen) {
if (isOpen) {
element.find('.MainMenu').addClass("Menu--open");
element.find('menu-toggle-button').addClass("MenuToggle--open");
} else {
element.find('.MainMenu').removeClass("Menu--open");
element.find('menu-toggle-button').removeClass("MenuToggle--open");
}
});
} }
}; };
} }

View File

@@ -2,19 +2,34 @@
export default ['$route', '$rootScope', function($route, $rootScope) { export default ['$route', '$rootScope', function($route, $rootScope) {
return { return {
link: function(scope, element, attrs) { require: '^^mainMenu',
link: function(scope, element, attrs, mainMenuController) {
var routeName = attrs.linkTo; var routeName = attrs.linkTo;
scope.$watch(function() { scope.$on('$routeChangeStart', function() {
return $route.current.name; // any time we start a route change,
}, function(nextRoute) { // assume it was from the menu, and
if (nextRoute === routeName) { // close it in case it's open
mainMenuController.close();
});
scope.$on('$routeChangeSuccess', function(e, nextRoute) {
if (nextRoute.$$route.name === routeName) {
element.addClass('MenuItem--active'); element.addClass('MenuItem--active');
} else { } else {
element.removeClass('MenuItem--active'); element.removeClass('MenuItem--active');
} }
return nextRoute.$$route.name;
}); });
scope.$on('$destroy', function() {
element.off('click.menu-item');
});
element.on('click', function(e) {
mainMenuController.close();
}, true);
} }
}; };
}]; }];

View File

@@ -4,17 +4,23 @@ export default function() {
return { return {
templateUrl: '/static/js/main-menu/menu-toggle.partial.html', templateUrl: '/static/js/main-menu/menu-toggle.partial.html',
restrict: 'E', restrict: 'E',
require: '^^mainMenu',
scope: { scope: {
width: '@', width: '@',
height: '@', height: '@',
barHeight: '@' barHeight: '@'
}, },
link: function(scope, element, attrs) { link: function(scope, element, attrs, mainMenuController) {
scope.$on('$destroy', function() {
element.off('click');
});
element.on("click", function(e) { element.on("click", function(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
$(".MainMenu").toggleClass("Menu--open"); scope.$apply(function() {
element.toggleClass("MenuToggle--open"); mainMenuController.toggle();
});
}); });
} }
}; };