动态下拉菜单创建问题(使用AngularJS,CSS,JSON)

时间:2017-09-25 10:20:57

标签: javascript html css angularjs

应用CSS样式后,仅显示“上一个”菜单项。 如果我尝试不使用CSS(样式标签),则会显示完整菜单。

我应该改变什么?

请在下面找到代码段。



<html>
<head>
<meta charset="ISO-8859-1">
<title>Angular Test</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script>
var helloAjaxApp = angular.module("myApp", []);

helloAjaxApp.controller("myCtrl3", function($scope) { 

          var data =[{"name":"home","submenus":[]},{"name":"enrollment","submenus":[{"name":"New Enrollment","submenus":[{"name":"Ekyc"},{"name":"Non_ekyc"}]},{"name":"Modify Old","submenus":[{"name":"Ekyc"},{"name":"Non_ekyc"}]}]},{"name":"User Module","submenus":[{"name":"Create","submenus":[]},{"name":"Modify","submenus":[]},{"name":"Delete","submenus":[]}]}];
                        $scope.menus =data;

         }); 
</script>
<style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            font: 300 15px/1.5 "Helvetica Neue", helvetica, arial, sans-serif;
            background: #333;
            margin: 15px;
        }


        h1 {
            font-size: 45px;
            font-weight: 100;
            letter-spacing: 15px;
            text-align: center;
        }

        h1, #main_content, #dog_link {
            padding: 15px;
        }

        p {
            margin: 15px 0;
        }

        a {
            color: #06c;
        }

        #main_nav ul {
            background: white;
            float: left;
            -webkit-transition: .5s;
            transition: .5s;
        }

        #main_nav li {
            float: left;
            position: relative;
            width: 150px;
            list-style: none;
            -webkit-transition: .5s;
            transition: .5s;
        }

        #main_nav > ul > li > a, h1 {
            text-transform: uppercase;
        }

        #main_nav a {
            display: block;
            text-decoration: none;
            padding: 5px 15px;
            color: #000;
        }

        #main_nav ul ul {
            position: absolute;
            left: 0;
            top: 100%;
            visibility: hidden;
            opacity: 0;
        }

        #main_nav ul ul ul {
            left: 100%;
            top: 0;
        }

        #main_nav li:hover, #main_nav li:hover li {
            background: #ddd;
        }

        #main_nav li li:hover, #main_nav li li:hover li {
            background: #bbb;
        }

        #main_nav li li li:hover {
            background: #999;
        }

        #main_nav li:hover > ul {
            visibility: visible;
            opacity: 1;
        }
    </style>
</head>
<body >
<h1 align="center">Home Page</h1>
<div ng-app="myApp"> 
<div  ng-controller="myCtrl3"> 
<nav id="main_nav">
<ul  ng-repeat="menu in menus" >
<li><a href="#" >{{menu.name}}</a>
<ul ng-repeat="submenu1 in menu.submenus" >
<li><a href="#" >{{submenu1.name}}</a>
<ul ng-repeat="submenu2 in submenu1.submenus" >
<li><a href="#" >{{submenu2.name}}</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</div> 
</body>
</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

问题是您将ng-repeat指令添加到ul而不是将其放在li标记上。
我更新了你的答案,现在它似乎正常工作,没有任何CSS更改。因为你的逻辑很好。只需看看我在HTML中添加ng-repeat指令的位置。

&#13;
&#13;
<html>

<head>
  <meta charset="ISO-8859-1">
  <title>Angular Test</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
  <script>
    var helloAjaxApp = angular.module("myApp", []);

    helloAjaxApp.controller("myCtrl3", function($scope) {

      var data = [{
        "name": "home",
        "submenus": []
      }, {
        "name": "enrollment",
        "submenus": [{
          "name": "New Enrollment",
          "submenus": [{
            "name": "Ekyc"
          }, {
            "name": "Non_ekyc"
          }]
        }, {
          "name": "Modify Old",
          "submenus": [{
            "name": "Ekyc"
          }, {
            "name": "Non_ekyc"
          }]
        }]
      }, {
        "name": "User Module",
        "submenus": [{
          "name": "Create",
          "submenus": []
        }, {
          "name": "Modify",
          "submenus": []
        }, {
          "name": "Delete",
          "submenus": []
        }]
      }];
      $scope.menus = data;

    });
  </script>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    
    body {
      font: 300 15px/1.5 "Helvetica Neue", helvetica, arial, sans-serif;
      background: #333;
      margin: 15px;
    }
    
    h1 {
      font-size: 45px;
      font-weight: 100;
      letter-spacing: 15px;
      text-align: center;
    }
    
    h1,
    #main_content,
    #dog_link {
      padding: 15px;
    }
    
    p {
      margin: 15px 0;
    }
    
    a {
      color: #06c;
    }
    
    #main_nav ul {
      background: white;
      float: left;
      -webkit-transition: .5s;
      transition: .5s;
    }
    
    #main_nav li {
      float: left;
      position: relative;
      width: 150px;
      list-style: none;
      -webkit-transition: .5s;
      transition: .5s;
    }
    
    #main_nav>ul>li>a,
    h1 {
      text-transform: uppercase;
    }
    
    #main_nav a {
      display: block;
      text-decoration: none;
      padding: 5px 15px;
      color: #000;
    }
    
    #main_nav ul ul {
      position: absolute;
      left: 0;
      top: 100%;
      visibility: hidden;
      opacity: 0;
    }
    
    #main_nav ul ul ul {
      left: 100%;
      top: 0;
    }
    
    #main_nav li:hover,
    #main_nav li:hover li {
      background: #ddd;
    }
    
    #main_nav li li:hover,
    #main_nav li li:hover li {
      background: #bbb;
    }
    
    #main_nav li li li:hover {
      background: #999;
    }
    
    #main_nav li:hover>ul {
      visibility: visible;
      opacity: 1;
    }
  </style>
</head>

<body>
  <h1 align="center">Home Page</h1>
  <div ng-app="myApp">
    <div ng-controller="myCtrl3">
      <nav id="main_nav">
        <ul>
          <li ng-repeat="menu in menus"><a href="#">{{menu.name}}</a>
            <ul>
              <li ng-repeat="submenu1 in menu.submenus"><a href="#">{{submenu1.name}}</a>
                <ul>
                  <li ng-repeat="submenu2 in submenu1.submenus"><a href="#">{{submenu2.name}}</a></li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </nav>
    </div>
  </div>
</body>

</html>
&#13;
&#13;
&#13;