【问题标题】:Navbar toggle not working with Angular 4 / ng-bootstrap导航栏切换不适用于 Angular 4 / ng-bootstrap
【发布时间】:2018-03-03 01:23:17
【问题描述】:

我在 angular 4 项目中使用 ng-bootstrap

<navbar class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
    <button aria-controls="navbarsDefault" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler navbar-toggler-right" data-target="#navbarsDefault" data-toggle="collapse" type="button">
        <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar</a> 
    <div class="collapse navbar-collapse" id="navbarsDefault">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item">
                <a class="nav-link active" routerlink="/dashboard" routerlinkactive="active" ng-reflect-router-link="/dashboard" ng-reflect-router-link-active="active" href="/dashboard">Dashboard</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" routerlink="/program" routerlinkactive="active" ng-reflect-router-link="/program" ng-reflect-router-link-active="active" href="/program">Programm</a>
            </li>          
        </ul>
    </div>
</navbar>

导航栏在那里,反应灵敏,似乎工作正常。但是导航栏切换按钮不会切换导航栏,当它折叠并且我找不到错误时。

【问题讨论】:

  • 您检查浏览器控制台是否有错误?如果您为您的问题提供一个 JSfiddle 也会很有帮助:)
  • 没有任何错误,因为没有任何事件绑定到切换按钮。 Bootstrap 应该提供这个,但它没有。而且我无法提供 JSfiddle,因为 Angular 4 在 JSfiddle 中不可用。
  • 这对我来说效果很好。谢谢!
  • 我遇到了同样的问题,@jmiguel77 的回答救了我!我

标签: toggle navbar ng-bootstrap


【解决方案1】:

我在使用 Angular 10、Bootstrap 4.5 时遇到了同样的问题。 在检查了安装和提供所有必要依赖项的所有可能性 2 天后,我已按照 Wyatt Lansdale (https://ng-bootstrap.github.io/#/components/collapse/examples) 提供的链接中的说明进行操作。

只要我有来自 Bootstrap 文档的汉堡包图标 () 仍然没有区别,但是一旦我将其更改为汉堡包图标的 unicode 字符 ( & # 9 7 7 6 ; 没有空格)问题解决了!最终有效:)

【讨论】:

    【解决方案2】:

    我想我可以分享对我有用的东西。

    我有几个你可能会考虑的要求;

    • 角度 8
    • 引导程序 4.5

    ...在我的 html 模板中 [header.component.html]

    
    <nav id="mainNavbar" class="navbar navbar-expand-sm navbar-light bg-light">
      <div class="container-fluid">
        <a routerLink="/" class="navbar-brand">APP_NAME</a>
        <button
          class="navbar-toggler"
          type="button"
          data-toggle="collapse"
          data-target="#navbarSupportedContent"
          aria-controls="navbarSupportedContent"
          aria-expanded="false"
          aria-label="Toggle navigation"
          (click)="collapsed = !this.collapsed"
        >
          <span class="navbar-toggler-icon"></span>
        </button>
        <div
          id="navbarSupportedContent"
          [ngClass]="{ collapse: collapsed, 'navbar-collapse': true }"
        >
          <!-- right nav menus -->
          <ul class="navbar-nav ml-auto">
            <li routerLinkActive="active" class="nav-item">
              <a routerLink="/LINK_1" class="nav-link"> lINK_1 </a>
            </li>
            <li routerLinkActive="active" class="nav-item">
              <a routerLink="/LINK_2" class="nav-link"> LINK_2 </a>
            </li>
          </ul>
        </div>
      </div>
    </nav>
    
    

    ...在我的 ts 组件中 [header.component.ts]

    import { Component, OnInit} from "@angular/core";
    
    @Component({
      selector: "app-header",
      templateUrl: "./header.component.html",
      styleUrls: ["./header.component.css"],
    })
    export class HeaderComponent implements OnInit {
    
      collapsed = true;
    
      constructor() {}
    
      ngOnInit() {}
    }
    
    

    我希望这会有所帮助。反馈和建议表示赞赏。 :)

    【讨论】:

      【解决方案3】:

      在脚本标签下的Angular.json文件中添加“./node_modules/jquery/dist/jquery.js”,它将起作用。

      【讨论】:

        【解决方案4】:
        #you can use click method in your html and use router navigate in your type script.
        
        #In HTML File
             <a class="nav-link" (click)="onMenuClick('profile')">Profile </a>
        #In Type Script file
        
         onMenuClick(path) {
            $('.navbar-toggler').click();
            this.router.navigate(['/' + path]);
        
          }
        

        【讨论】:

          【解决方案5】:

          它非常简单,非常直接,

          C:\Niagara\Vega\ncPortal\.angular-cli.json

          在脚本下,添加这一行,或者从你的 node_modules 指向 bootstrap.js 文件,

           "../node_modules/bootstrap/dist/js/bootstrap.js"
          

          现在重建您的应用程序,不仅是切换,所有其他操作也将按预期工作。

          【讨论】:

          【解决方案6】:

          我最终做了这样的事情:

          在 html 模板中我有这个代码:

           <nav id="mainNavbar" class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
                  <a class="navbar-brand" href="#">Navbar</a>
                  <button class="navbar-toggler" type="button" data-toggle="collapse"
                     data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
                     aria-expanded="false" aria-label="Toggle navigation"
                     (click)="toggleCollapsed()">
                    <span class="navbar-toggler-icon"></span>
                  </button>
                  <div id="navbarSupportedContent" [ngClass]="{'collapse': collapsed, 'navbar-collapse': true}">
                      ......
                  </div>
          </nav>
          

          在组件中我有这个

          export class NavComponent {
               collapsed = true;
               toggleCollapsed(): void {
                 this.collapsed = !this.collapsed;
               }
          }
          

          【讨论】:

          • {'navbar-collapse': true} 应该放在类而不是 ngClass
          • 这可能有效,但这不是正确的解决方案。您需要以正确的顺序在 angular.json 文件中包含引导脚本。像这样的东西,“脚本”:[“node_modules/pace-js/pace.min.js”,“node_modules/jquery/dist/jquery.js”,“node_modules/datatables.net/js/jquery.dataTables.js” , "node_modules/bootstrap/dist/js/bootstrap.min.js" ]
          • 有什么方法可以让它与动画一起使用?
          【解决方案7】:

          正如 cmets 和 jmiguel77 的最佳答案中提到的那样

          只是想分享一下,我也在 ng-bootstrap Github 文档https://ng-bootstrap.github.io/#/components/collapse/examples 上找到了类似的方法

          我改用 [ngbCollapse]="isCollapsed"。两种方式都得出与我所看到的结果相同的结果。

          这是我的代码:

          //app-navbar.component.html
          
          
             <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
            <a class="navbar-brand" href="#">{{title}}</a>
            <button class="navbar-toggler" type="button" (click)="toggleCollapsed()" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
              <span class="navbar-toggler-icon" ngToggler></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarsExampleDefault"  [ngbCollapse]="isCollapsed" >
              <ul class="navbar-nav mr-auto">
                <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>
                <li class="nav-item dropdown" ngbDropdown>
                  <a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" ngbDropdownToggle>Dropdown</a>
                  <div class="dropdown-menu" aria-labelledby="dropdown01" ngbDropdownMenu>
                    <a class="dropdown-item" href="#">Action</a>
                    <a class="dropdown-item" href="#">Another action</a>
                    <a class="dropdown-item" href="#">Something else here</a>
                  </div>
                </li>
              </ul>
              <form class="form-inline my-2 my-lg-0">
                <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
                <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
              </form>
            </div>
          </nav>
          
          //app-navbar.component.ts
          
          import { Component, OnInit, Input } from '@angular/core';
          
          
          
          
          @Component({
            selector: 'app-navbar',
            templateUrl: './app-navbar.component.html',
            styleUrls: ['./app-navbar.component.css']
          })
          export class AppNavbarComponent implements OnInit {
            @Input() title: String;
            isCollapsed = true;
            toggleCollapsed(): void {
              this.isCollapsed = !this.isCollapsed;
            }
          
            constructor() { }
          
          
          
            ngOnInit() {
            }
          
          
          
          }
          

          【讨论】:

            猜你喜欢
            • 2020-09-03
            • 1970-01-01
            • 2015-09-02
            • 2019-12-09
            • 2018-01-22
            • 2018-09-03
            • 2018-08-09
            • 2018-02-07
            • 2018-11-17
            相关资源
            最近更新 更多