<!DOCTYPE html>
<html>

  <head>
    <script data-require="angular.js@1.4.1" data-semver="1.4.1" src="https://code.angularjs.org/1.4.1/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-app="app" ng-controller="MainController as main">
    
    <ul my-menu="main.menu">
    </ul>
  </body>

</html>
// Code goes here

angular.module('app', [])
.controller('MainController', MainController)
.directive('myMenu', myMenu)
.directive('myMenuItem', myMenuItem);

function MainController() {
  this.menu = [
    { name : 'level 1', menu : [{ name: 'level 2'}] },
    { name : 'level 1', menu : [{ name: 'level 2', menu: [{ name : 'level 3'}]}] },
    { name : 'level 1' },
  ]; 
}

function myMenu() {
    return {
      scope : {
        myMenu : '=myMenu'
      },
      template: '<li ng-repeat="item in myMenu"><my-menu-item></my-menu-item></li>',
      link: function(scope, elem) {
      }
    }
}

myMenuItem.$inject = ['$compile'];
function myMenuItem($compile) {
    return {
      template: '<a href ng-bind="item.name" ng-click="show($event)"></a>',
      link: function(scope, element) {
        if (angular.isArray(scope.item.menu)) {
              element.append($compile('<ul ng-if="collapsed" my-menu="item.menu"></ul>')(scope));
              
        }
        scope.show = function($event) {
          scope.collapsed = !scope.collapsed;
        }
      }
    }
}



/* Styles go here */