Отзывчивый раскрывающийся навигатор с angular -ui bootstrap (выполненный в правильном стиле angular)
Я создал JSFiddle с раскрывающимся navbar с помощью angular -ui-boostrap module "ui.bootstrap.dropdownToggle": http://jsfiddle.net/mhu23/2pmz5/
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container"> <a class="brand" href="#">
My Responsive NavBar
</a>
<ul class="nav">
<li class="divider-vertical"></li>
<li class="dropdown"> <a href="#" class="dropdown-toggle">
Menu 1 <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="#/list">Entry 1</a>
</li>
<li><a href="#/list">Entry 2</a>
</li>
</ul>
</li>
....
</ul>
</div>
</div>
</div>
Насколько я понимаю, это правильный способ angular реализовать такое выпадающее меню. "Неправильный" способ с точки зрения angularjs состоял бы в том, чтобы включить bootstrap.js и использовать раскрывающийся список "data-toggle ="... Я здесь?
Теперь я хотел бы добавить отзывчивое поведение к моему navbar, как это сделано в следующем скрипте:
http://jsfiddle.net/ghtC9/6/
НО, что-то мне не нравится в вышеупомянутом решении. Парень включил bootstrap.js!
Итак, каков был бы правильный способ angular добавить отзывчивое поведение к существующему navbar?
Мне, очевидно, нужно использовать бутстрапы, реагирующие на классы navbar, такие как "крах коллапса" nav-collapse "," зависание с клавиатуры ". Но я не знаю, как...
Я очень благодарен за вашу помощь!
Заранее благодарю!
Майкл
Ответы
Ответ 1
Вы можете сделать это, используя директиву "collapse": http://jsfiddle.net/iscrow/Es4L3/
(проверьте два "примечания" в HTML).
<!-- Note: set the initial collapsed state and change it when clicking -->
<a ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed" class="btn btn-navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="#">Title</a>
<!-- Note: use "collapse" here. The original "data-" settings are not needed anymore. -->
<div collapse="navCollapsed" class="nav-collapse collapse navbar-responsive-collapse">
<ul class="nav">
То есть вам нужно сохранить свернутое состояние в переменной и изменить свернутое также путем (просто) изменения значения этой переменной.
В выпуске 0.14 добавлен префикс uib-
для компонентов:
https://github.com/angular-ui/bootstrap/wiki/Migration-guide-for-prefixes
Изменить: collapse
на uib-collapse
.
Ответ 2
Обновление 2015-06
На основе комментарий/пример antoinepairet:
Использование атрибута uib-collapse
обеспечивает анимацию: http://plnkr.co/edit/omyoOxYnCdWJP8ANmTc6?p=preview
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<!-- note the ng-init and ng-click here: -->
<button type="button" class="navbar-toggle" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed">
<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" uib-collapse="navCollapsed">
<ul class="nav navbar-nav">
...
</ul>
</div>
</nav>
Древний..
Я вижу, что вопрос сформулирован вокруг BS2, но я думал, что смогу использовать решение для Bootstrap 3, используя решение ng-класса, основанное на предложениях в ui.bootstrap issue 394:
Единственным отличием от официального отчета является добавление атрибутов ng-
, отмеченных комментариями, ниже:
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<!-- note the ng-init and ng-click here: -->
<button type="button" class="navbar-toggle" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed">
<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>
<!-- note the ng-class here -->
<div class="collapse navbar-collapse" ng-class="{'in':!navCollapsed}">
<ul class="nav navbar-nav">
...
Вот обновленный рабочий пример: http://plnkr.co/edit/OlCCnbGlYWeO7Nxwfj5G?p=preview (кончик шляпы Ларса)
Это, похоже, работает для меня в простых случаях использования, но в примере вы заметите, что второе выпадающее меню отключено... удачи!
Ответ 3
Не уверен, что у кого-то есть такая же отзывчивая проблема, но это было просто простое решение css для меня.
тот же пример
... ng-init="isCollapsed = true" ng-click="isCollapsed = !isCollapsed"> ...
... div collapse="isCollapsed"> ...
с
@media screen and (min-width: 768px) {
.collapse{
display: block !important;
}
}
Ответ 4
Мое совпадение для адаптивного/выпадающего навигатора с помощью angular -ui bootstrap (при обновлении до angular 1.5 и ui-bootrap 1.2.1)
index.html
...
<link rel="stylesheet" href="/css/app.css">
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<input type="checkbox" id="navbar-toggle-cbox">
<div class="navbar-header">
<label for="navbar-toggle-cbox" class="navbar-toggle"
ng-init="navCollapsed = true"
ng-click="navCollapsed = !navCollapsed"
aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</label>
<a class="navbar-brand" href="#">Project name</a>
<div id="navbar" class="collapse navbar-collapse" ng-class="{'in':!navCollapsed}">
<ul class="nav navbar-nav">
<li class="active"><a href="/view1">Home</a></li>
<li><a href="/view2">About</a></li>
<li><a href="#">Contact</a></li>
<li uib-dropdown>
<a href="#" uib-dropdown-toggle>Dropdown <b class="caret"></b></a>
<ul uib-dropdown-menu role="menu" aria-labelledby="split-button">
<li role="menuitem"><a href="#">Action</a></li>
<li role="menuitem"><a href="#">Another action</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
app.css
/* show the collapse when navbar toggle is checked */
#navbar-toggle-cbox:checked ~ .collapse {
display: block;
}
/* the checkbox used only internally; don't display it */
#navbar-toggle-cbox {
display:none
}