ng-bootstrap和Angular 4应用程序中,导航栏面包屑按钮的折叠功能无法正常工作

13

我正在使用 Angular 4、Bootstrap 4 beta 2 和 ng-bootstrap 来开发我的应用程序,并且还在使用 ng-bootstrap。

我从 Bootstrap 文档示例中添加了导航栏。

代码如下:

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarTogglerDemo02">
    <ul class="navbar-nav mr-auto mt-2 mt-lg-0">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
    <form class="form-inline my-2 my-lg-0">
      <input class="form-control mr-sm-2" type="search" placeholder="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

我也在angular-cli.json中添加了bootstrap样式。 代码看起来像这样:

 "styles": [
        "../node_modules/bootstrap/dist/css/bootstrap.min.css",
        "styles.css"
      ],
在移动视图中,面包屑按钮在单击时没有响应。当我尝试检查相同的内容时,我发现“collapsed”类在单击按钮时未被添加。 输入图像描述

似乎您忘记添加JQuery/bootstrap.js。 - Znaneswar
我正在使用ng-bootstrap,不需要jQuery。 - Adithya Sai
6个回答

28

我现在有一个解决方案。只需要使用ng-bootstrap就可以解决你的问题。

HTML文件:

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler btn btn-outline-primary" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02"  aria-expanded="false" aria-label="Toggle navigation" (click)="isCollapsed = !isCollapsed" [attr.aria-expanded]="!isCollapsed" aria-controls="navbarTogglerDemo02">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarTogglerDemo02" [ngbCollapse]="isCollapsed">
    <ul class="navbar-nav mr-auto mt-2 mt-lg-0">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
    <form class="form-inline my-2 my-lg-0">
      <input class="form-control mr-sm-2" type="search" placeholder="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

组件 ts 文件:

export class AppComponent {
  isCollapsed = false;
}

在 angular-cli.json 中添加 Bootstrap CSS 文件:

"styles": [
        "../node_modules/bootstrap/dist/css/bootstrap.min.css",
        "styles.css"
      ],

将以下内容添加到主模块:

import {NgbModule} from '@ng-bootstrap/ng-bootstrap';

imports: [
  NgbModule.forRoot()
]

这将像魔法一样奏效。

使用ng-bootstrap的主要优点是可以消除其他js库(如jquery和popper)的依赖,并且您还可以为bootstrap编写自己的组件。


模块未找到:错误:无法解析'/home/www/angular/ngdemo/src/app'中的'@ng-bootstrap/ng-bootstrap' - Jay Momaya
1
@Jay Momaya 你先安装了ng-bootstrap吗?npm install --save @ng-bootstrap/ng-bootstrap 点击这里查看 链接 - dtechplus
1
对我有用。谢谢。 - Aniruddha Das
我在 Angular 11 中尝试了这个,但点击折叠菜单仍然无法工作。 - elesh.j
简单而非常有效,非常感谢。 - Fernando Jaconete
显示剩余2条评论

10
使用ng-bootstrap(或在我的情况下是ngx-boostrap)确实简化了事情,因为我不必担心jQuery和popper。正如当前接受的答案所提到的那样。
但是,这并没有直接解决我的问题,因为我错过了重要的细节。在您使用ngx-bootstrap后,可以通过将“navbar-collapse” div的“collapse”属性绑定到组件文件中的变量来开始:
<div [collapse]="isCollapsed" class="navbar-collapse collapse" id="navbar-main">
  ...
</div>

仅仅这样是不够的,你实际上需要自己修改这个变量(这是我错过的部分),通过绑定你的切换按钮的点击事件:

<button (click)="isCollapsed = !isCollapsed" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-main" aria-controls="navbar-main" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
</button>

(click)="isCollapsed = !isCollapsed" 对我来说是一个基本的缺失部分。这将按钮的 onClick 事件绑定到您的 isCollapsed 变量,当单击时切换它,从而适当地设置导航栏的 collapse 属性。

这是我找到的 jsfiddle,最终帮助我找出我的错误: jsFiddle external link


对我有用,谢谢。不过,为了避免 Angular 9 抛出错误,我必须执行 [class.collapse]="isCollapsed"。 - BrainOverflow

0

我已经使用以下解决方案修复了

component.html

<nav class="navbar navbar-expand-lg navbar-light bg-light shadow bg-body rounded">
<div class="container-fluid">
    <a class="navbar-brand" href="/">{{ applicationName }}</a>
    <button #collapseButton class="navbar-toggler" type="button" data-bs-toggle="collapse"
        data-bs-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false"
        aria-label="Toggle navigation" (click)="togglePanel(collapseButton,collapsePanel)">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div #collapsePanel class="collapse navbar-collapse" id="navbarTogglerDemo02">
        <div class="navbar-nav me-auto mb-2 mb-lg-0"></div>
        <ul class="navbar-nav me-2">

            <li class="nav-item" *ngFor="let navItem of navMenuList">
                <a class="nav-link" [routerLink]="navItem.path">
                    <mat-icon>{{navItem.icon}}</mat-icon> {{navItem.name}}
                </a>
            </li>

        </ul>
    </div>
</div>

component.ts

togglePanel(collapseButton: HTMLElement, collapsePanel: HTMLElement) {
if (this.isCollapsed) {
  collapseButton.classList.add('collapsed');
  collapsePanel.classList.remove('show');
} else {
  collapsePanel.classList.add('show');
  collapseButton.classList.remove('collapsed');
}
this.isCollapsed = !this.isCollapsed

}


0

0

工作中的导航栏

ng-bootstrap

入门指南

组件

{{ 组件 }}

 <span class="github-buttons d-none d-lg-inline"> 
   <a class="github-button" 
      href="https://github.com/ng-bootstrap/ng-bootstrap" 
      target="_blank" 
      data-style="mega" 
      data-count-href="/ng-bootstrap/ng-bootstrap/stargazers" 
      data-count-api="/repos/ng-bootstrap/ng-bootstrap#stargazers_count" 
      data-count-aria-label="# stargazers on GitHub" 
      aria-label="Star ng-bootstrap/ng-bootstrap on GitHub">Star</a> 
   <a href="https://twitter.com/intent/tweet?button_hashtag=ngbootstrap" 
      class="twitter-hashtag-button" 
      data-size="large" 
      data-text="I&#39;m checking out ng-bootstrap, THE Angular UI framework for Bootstrap CSS" 
      data-url="https://ng-bootstrap.github.io" 
      data-show-count="true">Tweet #ngbootstrap</a> 
 </span> 


-1
我遇到了类似的问题。要让你的Angular项目正常工作并不复杂。只需打开index.html(主HTML文件),并在body的底部添加js代码即可:

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,以帮助他人理解如何解答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接