Angular 和 ui-router 的导航栏下拉菜单将不起作用

Navbar dropdown with Angular and ui-router won't work

我已经为此苦苦思索了一段时间,出于某种原因,我无法获得一个简单的 bootstrap 导航栏下拉菜单来使用 angular ui -router 和 ui-bootstrap(1.3.3,最新)。这是我当前的代码:

<div class="container">
  <div class="row">
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" 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>
          </button>
          <a class="navbar-brand" href="#">Your <img class="logo-img" src="assets/images/formio-logo-lg.png"> application.</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li><a ui-sref="home">Home</a></li>
            <li><a ng-class="{active:isActive('calendar')}" ui-sref="calendar" ng-show="authenticated">Duty Shifts</a></li>
            <li><a ng-class="{active:isActive('eventIndex')}" ui-sref="eventIndex" ng-show="authenticated">Events</a></li>
            <li><a ng-class="{active:isActive('trainingIndex')}" ui-sref="trainingIndex" ng-show="authenticated">Training</a></li>
            <li><a ng-class="{active:isActive('shiftIndex')}" ui-sref="shiftIndex" ng-show="authenticated">Shifts List</a></li>
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Admin<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a ui-sref="trainingCreate">Add Training</a></li>
                <li><a ui-sref="eventCreate">Add Event</a></li>
                <li><a ui-sref="shiftCreate">Add Shift</a></li>
              </ul>
            </li>
          </ul>
          <ul class="nav navbar-nav navbar-right">
            <li ng-if="authenticated"><a href="#" ng-click="logout()"><span class="glyphicon glyphicon-off" aria-hidden="true"></span> Logout</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>
  </div>
  <div id="content">
    <div class="row" ng-cloak>
      <uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.message}}</uib-alert>
    </div>
    <div ui-view></div>
  </div>
</div>

使用此设置,我看到了“管理”下拉菜单,但无论我是否具有 ui-sref 属性,单击都没有任何反应。

如果我对下拉菜单执行 migration guide 中建议的所有操作,如下所示:

            <li uib-dropdown>
              <a ui-sref="home" uib-dropdown-toggle uib-dropdown role="button" aria-haspopup="true" aria-expanded="false">Admin<span class="caret"></span></a>
              <ul uib-dropdown-menu>
                <li><a ui-sref="trainingCreate">Add Training</a></li>
                <li><a ui-sref="eventCreate">Add Event</a></li>
                <li><a ui-sref="shiftCreate">Add Shift</a></li>
              </ul>
            </li>

还是不行。我确定我遗漏了一些明显的东西,但我不确定是什么。我查看了 ui-navbar 包,但如果不需要的话,我不想为了下拉菜单而重新设置所有工具。

我做错了什么?是的,我的应用程序定义中确实注入了 ui.bootstrap 和 ui.router。

谢谢。

这里是working plunker based on your code.

导航栏内的管理下拉菜单如下所示:

<li class="dropdown" uib-dropdown>
    <a class="dropdown-toggle" uib-dropdown-toggle>
        <i class="fa fa-cogs"></i> Admin <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
        <li><a ui-sref="training" ng-click='navCollapsed = true'>Add Training</a></li>
    </ul>
</li>

当您单击训练时,它会在 div ui-视图中加载 training.html 作为单页应用程序。请注意,在 ui-sref 中,我添加了一个 ng-click 来折叠主导航。

完整的导航栏如下所示:

 <nav class="navbar navbar-inverse " role="navigation">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">

      <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>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" ng-class="!navCollapsed && 'in'">

      <ul class="nav navbar-nav">
        <li><a ui-sref="home"  ng-click='navCollapsed = true'>Home</a></li>
        <li><a ui-sref="home"  ng-click='navCollapsed = true'>Link</a></li>
        <li class="dropdown" uib-dropdown>
          <a class="dropdown-toggle" uib-dropdown-toggle>
            <i class="fa fa-cogs"></i> Admin
            <span class="caret"></span>
          </a>
          <ul class="dropdown-menu" role="menu">
            <li><a ui-sref="training" ng-click='navCollapsed = true'>Add Training</a></li>
          </ul>
        </li>

      </ul>
    </div>
    <!-- /.navbar-collapse -->
  </nav>

我这样配置路由:

angular.module('plunker', ['ui.router', 'ui.bootstrap'])
.config(function($stateProvider, $urlRouterProvider) {

    $urlRouterProvider.otherwise('/home');

    $stateProvider
    .state('home', {
      url: '/home'
    })

    .state('training', {
      url: '/training',
      templateUrl: 'training.html',
    });

  })

如果有帮助,请告诉我们。最好的。