web-dev-qa-db-fra.com

Angular UI, Bootstrap Navbar Collapse and Javascript)

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.

68
user2847643

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.

2
user2058054