Angular UI、Bootstrap 导航栏折叠和 Javascript

Posted

技术标签:

【中文标题】Angular UI、Bootstrap 导航栏折叠和 Javascript【英文标题】:Angular UI, Bootstrap Navbar Collapse and Javascript 【发布时间】:2014-07-13 02:59:54 【问题描述】:

我在很多方面都遇到了 UI-Router 的问题。我不明白它是如何与其他框架交互的。

也就是说,我正在尝试实现 Bootstrap 3 的导航栏折叠模块,如下所示:

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

这直接来自 Bootstrap 网站,在它自己的 .html 页面中可以正常工作。

问题是当我将它插入 UI-Router 视图时。折叠动作不再起作用——我猜是因为“数据目标”函数不知何故无法找到它的目标。

如何使用带有 Angular UI 的 Bootstrap 3? Angular UI Bootstrap 包没有导航栏模块。

下面的答案很好。这是一个参考网址Twitter Bootstrap Navbar with AngularJS - Collapse Not Functioning。

【问题讨论】:

【参考方案1】:

您应该用 ui-bootstrap 指令替换引导原生 js 属性(注意 ng-clickcollapse):

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

在你的控制器中设置初始值:

$scope.navbarCollapsed = true;

编辑:

新版本的 ui-bootstrap prefix all compontents。相应地调整您的代码,例如。 collapse -> uib-collapse.

【讨论】:

其实ui-router跟这个没有关系。如果您还没有,则需要在项目中包含 ui-bootstrap。您确实根本不需要来自原始 twitter bootstrap 发行版的任何 js 文件 - 它们可以被 ui-bootstrap 中的纯角度指令替换。 在元素上设置 navbarCollapsed 可能比在控制器中更具可读性。您可以将 ... ng-init="navbarCollapsed=true" ... 添加到折叠 另外,将ng-click="navbarCollapsed = !navbarCollapsed" 添加到&lt;div class="collapse...&gt; 内的链接将在做出选择时自动关闭菜单。 @GrantLindsay 我无法通过 ng-click 触发我的 bootstrap-ui 导航栏中的任何链接。我正在使用 ui-sref,这可能是为什么?你可以看到我的代码在oscil.io 运行 使用最新版本的 ui-boostrap (1.1.1) 您需要使用 'uib-collapse' 而不是 'collapse'。 &lt;div class="collapse navbar-collapse" id="navbar-ex-collapse" uib-collapse="navbarCollapsed"&gt; 见ui-bootstap docs。【参考方案2】:

我的特定问题围绕范围展开。我正在使用ng-repeat 循环浏览我的菜单项,因此navbarCollapsedng-repeat 子范围内无法访问。

解决方法是访问父作用域的变量。简单如:

ng-click="$parent.navbarCollapsed = !$parent.navbarCollapsed"

希望这对遇到同样问题的人有所帮助。

【讨论】:

以上是关于Angular UI、Bootstrap 导航栏折叠和 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

Angular UI Bootstrap 响应式导航栏下拉菜单在新版本中无法正常工作

Bootstrap 4 导航栏不会在 Angular 4 中折叠

Angular/Bootstrap - 导航栏无法正确显示

UI-Bootstrap 仅将模态背景应用于元素

Angular/Bootstrap - 带有可切换侧边栏的导航栏

html angular-ui-bootstrap Typeahead的示例用法(https://angular-ui.github.io/bootstrap/)