<!DOCTYPE html>
<html>
<head>
<script data-require="angularjs@1.5.7" data-semver="1.5.7" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular-animate.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="app" ng-controller="appCtrl">
<menu-bar menu-bar="menuBar1" menu-item-list="menuItemList1"></menu-bar>
<menu-bar menu-bar="menuBar2" menu-item-list="menuItemList2"></menu-bar>
</body>
</html>
// Code goes here
'use strict';
var app = angular.module('app', []);
app.controller('appCtrl', ["$scope", function($scope){
// your menu bar with buttons
$scope.menuBar1 = [
{
name:"Menu 1",
id:"1",
selected: false
},
{
name:"Menu 2",
id:"2",
selected: false
},
{
name:"Menu 3",
id:"3",
selected: false
}
];
$scope.menuBar2 = [
{
name:"Menu 4",
id:"4",
selected: false
},
{
name:"Menu 5",
id:"5",
selected: false
},
{
name:"Menu 6",
id:"6",
selected: false
},
{
name:"Menu 7",
id:"7",
selected: false
}
];
// your menu content lists which you attach to the menu bar directive
$scope.menuItemList1 = [
{
"item":[
{
name:"MenuItem",
ref:"1.0"
},
{
name:"MenuItem",
ref:"1.1"
},
{
name:"MenuItem",
ref:"1.2"
},
{
name:"MenuItem",
ref:"1.3"
},
{
name:"MenuItem",
ref:"1.4"
}
]
},
{
"item":[
{
name:"MenuItem",
ref:"2.0"
},
{
name:"MenuItem",
ref:"2.1"
}
]
},
{
"item":[
{
name:"MenuItem",
ref:"3.0"
},
{
name:"MenuItem",
ref:"3.1"
}
]
}
];
$scope.menuItemList2 = [
{
"item":[
{
name:"MenuItem",
ref:"4.0"
},
{
name:"MenuItem",
ref:"4.1"
}
]
},
{
"item":[
{
name:"MenuItem",
ref:"5.0"
},
{
name:"MenuItem",
ref:"5.1"
}
]
},
{
"item":[
{
name:"MenuItem",
ref:"6.0"
},
{
name:"MenuItem",
ref:"6.1"
}
]
},
{
"item":[
{
name:"MenuItem",
ref:"7.0"
},
{
name:"MenuItem",
ref:"7.1"
}
]
}
];
}]);
app.directive('menuBar', ['$rootScope', function($rootScope){
return {
restrict: 'E',
templateUrl: 'menu.html',
scope:{
menuBar: '=',
menuItemList: '='
},
link: function (scope, element, attrs) {
scope.menuClickInfo = '';
scope.isOpen = false;
var lastClickedMenu = null;
var showMenuContent = function(id){
for(var key in scope.menuBar){
if(scope.menuBar[key].id == id && scope.isOpen){
scope.menuBar[key].selected = true;
}else{
scope.menuBar[key].selected = false;
}
}
}
scope.menuToggle = function(id){
if(!scope.isOpen){
scope.isOpen = !scope.isOpen;
}else{
if(lastClickedMenu == id){
scope.isOpen = !scope.isOpen;
}
scope.menuClickInfo = '';
}
showMenuContent(id);
lastClickedMenu = id;
}
scope.menuClick = function(ref){
scope.menuClickInfo = 'Menu item clicked: '+ref;
}
}
}
}])
<div class="container">
<div class="menu-bar">
<div class="menu-click-info">{{menuClickInfo}}</div>
<button type="text" ng-click="menuToggle(menuBarItem.id)" ng-repeat="menuBarItem in menuBar" ng-class="{'selected':menuBarItem.selected, 'non-selected':!menuBarItem.selected, 'first':$index == 0, 'last': $index == menuBarItem.length-1}">{{menuBarItem.name}}</button>
</div>
<div class="drop-down" ng-show="isOpen">
<div ng-repeat="menuBarItem in menuBar" ng-show="menuBarItem.selected">
<!-- add your menu content list (menuItemList) here -->
<ul ng-repeat="menuItem in menuItemList[$index].item">
<li><a href="#" ng-click="menuClick(menuItem.ref)">{{menuItem.name}} {{menuItem.ref}}</a></li>
</ul>
</div>
</div>
</div>
.selected{
background:yellow;
}
.container{
padding:10px;
margin:10px;
border:solid 1px blue;
text-align:right;
}
.menu-click-info{
float:left;
}
.menu-bar{
border:green solid 1px;
padding:10px;
}
.drop-down{
border:red 1px dashed;
display:inline-block;
padding:0 30px 0 0;
margin:10px 0 0 0;
}
.drop-down.ng-hide-add, .drop-down.ng-hide-remove {
transition: all linear 0.5s;
}
.drop-down.ng-hide {
line-height: 0;
opacity: 0;
padding: 0 10px;
}