Bootstrap AngularJS 如果没有 li,则隐藏 ul
Bootstrap AngularJS Hide ul if no li
如果 #navbar-nav ul 没有 li 或可见 li,有没有办法使用 ng-hide 或 ng-if(即在元素内部,而不是控制器内部)来隐藏它?
也许这可以扩展为隐藏切换按钮,因为没有什么可显示的。
目前如果没有列表项,那么你仍然可以切换(上下滑动)导航栏,它看起来不太好。
我看到的大多数其他问题都与 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>
这里有几件事我们需要谈谈。首先是您使用 angular 的全部原因是对 manipulate/populate 视图进行数据绑定。话虽如此,您需要为 ng-if
/ng-show
/ng-hide
准备一些东西来进行检查。这就是控制器的用武之地。控制器必须包含信息,以便可以操作视图。所以在这种情况下,我们将要创建一个控制器,它有一个包含菜单列表项的变量:
app.controller('navCtrl', function(){
this.menuItems = [
{ name: 'Home', href: '' },
{ name: 'Products', href: '' },
{ name: 'Overview', href: '' }
];
});
完成后我们需要将其绑定到导航:
<div ng-controller="navCtrl as nav" class="navbar navbar-inverse navbar-fixed-top" role="navigation"> .... </div>
接下来,导航 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 = []
则不会创建 ul
和 button
。
这让我想到了第 2 点。唯一有意义的方法是,如果您通过某种 service
或 API 调用来填充菜单项,或者如果您可以动态 create/delete 导航项。如果您在控制器中对数组进行硬编码而不对其进行操作,那么您知道这些值将存在并且没有理由这样做。
我在此实现中的最后一点是根据此实现从 li
中删除 class="hidden-xs"
导航项将不会显示,即使它们在视口为 [=29 时存在=].
这里是 fiddle 查看完整的实现:
http://jsfiddle.net/9shaakw9/2/
希望对您有所帮助!
如果 #navbar-nav ul 没有 li 或可见 li,有没有办法使用 ng-hide 或 ng-if(即在元素内部,而不是控制器内部)来隐藏它?
也许这可以扩展为隐藏切换按钮,因为没有什么可显示的。
目前如果没有列表项,那么你仍然可以切换(上下滑动)导航栏,它看起来不太好。
我看到的大多数其他问题都与 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>
这里有几件事我们需要谈谈。首先是您使用 angular 的全部原因是对 manipulate/populate 视图进行数据绑定。话虽如此,您需要为 ng-if
/ng-show
/ng-hide
准备一些东西来进行检查。这就是控制器的用武之地。控制器必须包含信息,以便可以操作视图。所以在这种情况下,我们将要创建一个控制器,它有一个包含菜单列表项的变量:
app.controller('navCtrl', function(){
this.menuItems = [
{ name: 'Home', href: '' },
{ name: 'Products', href: '' },
{ name: 'Overview', href: '' }
];
});
完成后我们需要将其绑定到导航:
<div ng-controller="navCtrl as nav" class="navbar navbar-inverse navbar-fixed-top" role="navigation"> .... </div>
接下来,导航 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 = []
则不会创建 ul
和 button
。
这让我想到了第 2 点。唯一有意义的方法是,如果您通过某种 service
或 API 调用来填充菜单项,或者如果您可以动态 create/delete 导航项。如果您在控制器中对数组进行硬编码而不对其进行操作,那么您知道这些值将存在并且没有理由这样做。
我在此实现中的最后一点是根据此实现从 li
中删除 class="hidden-xs"
导航项将不会显示,即使它们在视口为 [=29 时存在=].
这里是 fiddle 查看完整的实现: http://jsfiddle.net/9shaakw9/2/
希望对您有所帮助!