使用Angular和ui-router的Navbar下拉列表无效

时间:2016-06-24 01:02:28

标签: javascript angularjs drop-down-menu angular-ui-router angular-ui-bootstrap

我一直在讨论这个问题一段时间,由于某种原因,我无法得到一个简单的bootstrap导航栏下拉列表来使用角度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>

使用此设置,我会看到Admin下拉菜单,但点击什么都不做,无论我是否有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。

感谢。

1 个答案:

答案 0 :(得分:0)

这是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-view中的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',
    });

  })

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