【问题标题】:Bootstrap AngularJS Hide ul if no liBootstrap AngularJS 如果没有 li 则隐藏 ul
【发布时间】:2016-07-13 21:11:33
【问题描述】:

如果没有 li 或可见 li,有没有办法使用 ng-hide 或 ng-if(即在元素内部,而不是控制器)隐藏 #navbar-nav ul?

也许这也可以扩展为隐藏切换按钮,因为没有什么可显示的。

目前如果没有列表项,那么你仍然可以切换(上下滑动)导航栏,但看起来不太好。

我看到的大多数其他问题都与 ng-repeat 相关

<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Brand</a>
    </div>
    <div class="collapse navbar-collapse">
      <ul class="nav navbar-nav" id="navbar-nav">
        <li class="active hidden-xs">
          <a href="#">Home</a>
        </li>
        <li class="hidden-xs">
          <a href="#products">Products</a>
        </li>
        <li class="hidden-xs">
          <a href="#overview">Overview</a>
        </li>
      </ul>
    </div>
    <!--/.nav-collapse -->
  </div>

JSFiddle

【问题讨论】:

  • 为什么你要使用 ng-show, ng-if 而你的菜单是静态的而不是有角度的?你已经在你的菜单项上使用了'hidden-xs',为什么不把'hidden-xs'放在切换按钮上,因为你已经知道xs上不会有li。
  • 这只是一个例子。隐藏它们是动态的。如果列表项不止这些,那么我希望下拉菜单仍能正常工作。

标签: html css angularjs angular-ng-if ng-hide


【解决方案1】:

这里有几件事我们需要谈一谈。首先是您使用 Angular 的全部原因是进行数据绑定以操作/填充视图。话虽如此,您需要有一些东西供ng-if/ng-show/ng-hide 核对。这就是控制器的用武之地。控制器必须包含信息,以便可以操纵视图。所以在这种情况下,我们将要创建一个控制器,该控制器有一个变量来包含菜单列表项:

app.controller('navCtrl', function(){
  this.menuItems = [
    { name: 'Home', href: '' },
    { name: 'Products', href: '' },
    { name: 'Overview', href: '' }
  ];
});

现在我们需要将它绑定到导航:

&lt;div ng-controller="navCtrl as nav" class="navbar navbar-inverse navbar-fixed-top" role="navigation"&gt; .... &lt;/div&gt;

接下来,导航 li 项目上需要有一个 ng-repeat,以便您可以填充 ul

<ul class="nav navbar-nav">
  <li ng-repeat="navItem in nav.menuItems">
    <a ng-href="{{ navItem.href }}">{{ navItem.name }}</a>
  </li>
</ul>

现在你可以开始做你所要求的了。只需添加一个ng-if 来检查是否有导航项:

<ul class="nav navbar-nav" ng-if="nav.menuItems.length > 0"> ... </ul>

您也可以在切换菜单上执行此操作:

<button ng-if="nav.menuItems.length > 0" type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> ... </button>

所以现在如果控制器 menuItems 是一个空数组 this.menuItems = [] 则不会创建 ulbutton

这让我想到了第 2 点。唯一有意义的方法是,如果您通过 service 或某种 API 调用填充菜单项,或者您可以动态创建/删除导航项。如果您在控制器中对数组进行硬编码而不是对其进行操作,那么您就知道这些值将存在并且没有理由这样做。

我在此实现中的最后一点是根据此实现从li 中删除class="hidden-xs",即使在视口为xs 时导航项存在,也不会显示。

这是一个检查完整实现的小提琴: http://jsfiddle.net/9shaakw9/2/

希望这会有所帮助!

【讨论】:

  • 谢谢。我将改变我的方法,并改用这个方法。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 2021-10-07
  • 2011-05-21
相关资源
最近更新 更多