【问题标题】:Menu and Submenu in AngularjsAngularjs 中的菜单和子菜单
【发布时间】:2016-03-06 11:21:12
【问题描述】:

我是 AngularJS 的新手,我想设计菜单和子菜单,如下图所示 -

我已经在 AngularJS 中创建了菜单,如下图所示 - http://jsfiddle.net/ashokyede20/pLnvsnLa/46/ 中也添加了相同的代码

以下是此菜单的 HTML 页面--

 <div id="wrapper1" class="container" ng-app="menuApp">
   <div id="nav1" ng-controller="menuController">
   <div><span> Dynamic Menu</span> </div>
         <ul>
            <li ng-repeat="menu in menus" class="has-children" ng-click="changeClass(menu)" lastOrFirst="{{menu.lastOrFirst}}" >
              <a href="{{menu.action}}">{{menu.title}} <span ></span></a>
              <ul ng-if="menu.menus">
              <div>
                <li ng-repeat="submenu in menu.menus" class="has-children">
                  <a href="{{submenu.action}}">{{submenu.title}}</a>
                      <ul ng-if="submenu.menus" ng-class="submenu.class">
                        <li ng-repeat="subsubmenu in submenu.menus">
                          <a href="{{subsubmenu.action}}">{{subsubmenu.title}}</a>
                        </li>
                      </ul>
                </li>
                </div>
              </ul>
            </li>
          </ul>
    </div>
</div>

CSS-

#wrapper1
    {
        width: auto;
        margin: 10px;
        text-align: left;
    }
    #nav1 div {color:Red; margin:10px;}
    #nav1 ul{list-style-type:none; padding:0; margin:0; }
    #nav1 ul li {display:inline-block; background-color:#E0E0E0; min-width:150px;}
    #nav1 ul li 
    {
        background-image:linear-gradient(to bottom, #ffffff, #eaeaea);
        background-repeat: repeat-x;
        border-bottom: 1px solid #d1d1d1;
        border-top: 1px solid #eaeaea;
        border-left: 1px solid #eaeaea;
        border-right: 1px solid #eaeaea;
            }
    #nav1 ul li:hover{background-color:#FFF; }
    #nav1 ul li:hover{ background-image:linear-gradient(to bottom, #eaeaea, #ffffff);
        background-repeat: repeat-x;
        border-bottom: 1px solid #eaeaea;
        border-top: 1px solid #d1d1d1;
        border-left: 1px solid #eaeaea;
        border-right: 1px solid #eaeaea;
        }
    #nav1 ul li:hover > a
     {
         border-bottom-color:#FFF;
         outline:0;
         text-decoration:none;
         border-top:solid 2px #1971c4;
         padding-top:12px;
         color:#1971c4;
         }
     #nav1 ul ul li:hover > a
     {
         border-top: 1px solid #eaeaea;
         }
     #nav1 ul li.has-children > a:after {
        content: "";
        background: url("http://www.cmegroup.com/etc/designs/cmegroup/cmegroupClientLibs/images/cme-header-sprite.png") no-repeat;
        width: 8px;
        height: 8px;
        display: inline-block;
        margin-left:5px;
    }
    #nav1 ul li a,visited{display:block; padding:15px; color:#888; text-decoration:none;}
    #nav1 ul li:hover > ul{display:block;}
    #nav1 ul li a:hover{color:#444;}
    #nav1 > ul li:hover a{color:#444;}

    #nav1 ul ul li{display:block;}
    #nav1 ul ul{position:absolute; background-color:#FFF; min-width:225px;}
    #nav1 ul ul li:hover{background-color:#F9F9F9;}
    #nav1 ul li:hover ul li a,visited{color:#888;}
    #nav1 ul ul li:hover ul{display:block;}
    #nav1 ul ul ul {margin: -47px 0 0 224px; background-color:#F9F9F9;}
    #nav1 ul ul ul li a:hover{color:#444;}
    #nav1 {vertical-align:middle; text-align:center;}

和控制器 ----------------------------------JS--------------- - menuApp.controller("menuController", function ($scope, $http) {

$scope.menus = [
{

    title: "Menu #1",
    action: "#"
},
{

    title: "Menu #2",
    action: "#",
    menus: [
      {
          title: "SubMenu #1",
          action: "#"
      },
      {
          title: "SubMenu #2",
          action: "#"
      },
      {
          title: "SubMenu #3",
          action: "#"
      },
      {
          title: "SubMenu #4",
          action: "#"
      }
    ]
},
{
    title: "Menu #3",
    action: "#",
    menus: [
    {
        title: "SubMenu #1",
        action: "#",
        menus: [
            {
                title: "Sub-SubMenu #1",
                action: "#"
            },
            {
                title: "Sub-SubMenu #2",
                action: "#"
            }
        ]
    }
  ]
},{
  title: "Menu #4",
  action: "#",
  menus: [
    {
        title: "SubMenu #1",
        action: "#",
        menus: [
            {
                title: "Sub-SubMenu #1",
                action: "#"
            },
            {
                title: "Sub-SubMenu #2",
                action: "#"
            }
        ]}]},{
  title: "Menu #5",
  action: "#",
  menus: [
  {
      title: "SubMenu #1",
      action: "#"
  },
  {
      title: "SubMenu #2",
      action: "#"
  }
]}];});

但我在显示第一张图片中突出显示的子菜单区域时遇到了问题。我不知道如何获取子菜单的左上角和右上角。

谁能帮帮我?

提前非常感谢...

【问题讨论】:

    标签: javascript html css angularjs angularjs-ng-repeat


    【解决方案1】:

    我认为你可以通过 CSS 做到这一点,如果将一些样式应用于子菜单 UL 应该是可行的。也许以下内容可以帮助您:

    #nav1 ul ul ul {position: absolute; top: 40px; left: 0; width: 100%; background-color:#F9F9F9;}
    

    如果你能分享你在某个地方运行的代码,那就太好了。

    问候

    【讨论】:

    • 感谢您的帮助,我在以下位置添加了代码,请看一下。这是我第一次在 jsFiddle 中添加代码,我试图解决这个问题,因为它在那里不起作用。 jsfiddle.net/ashokyede20/pLnvsnLa/15
    • Ashok,您必须更改并插入不同的 CSS 规则。添加了一些彩色背景以帮助识别不同的元素。您可以在此处查看更新:jsfiddle.net/pLnvsnLa/31 当您在不同的菜单级别中插入更多链接时,可能需要一些更新。
    • 感谢 Estefano,我已经更新了您提供的链接中的代码 jsfiddle.net/ashokyede20/pLnvsnLa/38 现在您可以在输出窗口中看到 UI。现在的问题就像我想在菜单选项卡下看到扩展的子菜单,它将从第一个菜单开始到最后一个菜单(这是它的宽度和起点。)。我无法确定它的起点。
    • 左边不应为 0px。它应该是“主页”菜单的左下角,每个子菜单都应该从这里开始。
    猜你喜欢
    • 2023-01-23
    • 1970-01-01
    • 2019-04-08
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多