J'ai des problèmes avec UI-Router de plusieurs manières. Je ne comprends pas comment il interagit avec d'autres cadres.
À savoir, j'essaie d'implémenter le module de repli de la barre de navigation de Bootstrap 3, vu ci-dessous:
<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="#">Project name test</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
Cela vient directement du site Web Bootstrap et cela fonctionne très bien à l'intérieur de sa propre page .html.
Le problème est lorsque je l'insère dans une vue UI-Router. L'action d'effondrement ne fonctionne plus - je suppose que la fonction "data-target" est en quelque sorte incapable de trouver sa cible.
Comment utilise-t-on Bootstrap 3 avec Angular UI? The Angular UI Bootstrap le paquet n'a pas de module navbar.
La réponse ci-dessous est bonne. Voici une URL de référence Twitter Bootstrap Navbar avec AngularJS - Collapse Not Functioning .
Vous devez remplacer bootstrap propriétés natives js par des directives ui-bootstrap (notez le ng-click
et collapse
):
<nav class="navbar navbar-default" role="navigation">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" ng-click="navbarCollapsed = !navbarCollapsed">
<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="#">
<!-- your branding here -->
</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" collapse="navbarCollapsed">
<!-- your normal collapsable content here -->
</div>
</nav>
Définissez la valeur initiale dans votre contrôleur:
$scope.navbarCollapsed = true;
Modifier:
Nouvelles versions de ui-bootstrap préfixe tous les composants . Ajustez votre code en conséquence, par exemple. collapse
-> uib-collapse
.
Mon problème particulier tournait autour de la portée. J'utilise ng-repeat
pour parcourir mes éléments de menu afin que navbarCollapsed
ne soit pas accessible dans le ng-repeat
portée enfant.
La résolution consistait à accéder aux variables de la portée parent. Aussi simple que:
ng-click="$parent.navbarCollapsed = !$parent.navbarCollapsed"
J'espère que cela aide toute personne ayant le même problème.