代码之家  ›  专栏  ›  技术社区  ›  Joseph

无法在Angular中的Bootstrap 4中切换导航栏

  •  35
  • Joseph  · 技术社区  · 7 年前

    为什么在angular 4中使用bootstrap 4调整到移动屏幕时无法切换导航栏。我将其包含在脚本和样式中的angular cli中,这是bootstrap中的节点模块。我的代码中缺少什么吗?请在下面检查。有什么问题吗?请帮忙

    <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
      <a class="navbar-brand" href="#">Dashboard</a>
      <button class="navbar-toggler d-lg-none" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
    
      <div class="collapse navbar-collapse" id="navbarsExampleDefault">
        <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="#">Settings</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Profile</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Help</a>
          </li>
        </ul>
        <form class="form-inline mt-2 mt-md-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>
    

     "styles": [
        "styles.css",
         "../node_modules/bootstrap/dist/css/bootstrap.min.css"
      ],
      "scripts": [
    
        "../node_modules/popper.js/dist/umd/popper.min.js",
        "../node_modules/jquery/dist/jquery.min.js",
        "../node_modules/bootstrap/dist/js/bootstrap.min.js"
    
      ],
    

    包裹json

          {
      "name": "dashboard2",
      "version": "0.0.0",
      "license": "MIT",
      "scripts": {
        "ng": "ng",
        "start": "ng serve",
        "build": "ng build",
        "test": "ng test",
        "lint": "ng lint",
        "e2e": "ng e2e"
      },
      "private": true,
      "dependencies": {
        "@angular/animations": "^4.0.0",
        "@angular/common": "^4.0.0",
        "@angular/compiler": "^4.0.0",
        "@angular/core": "^4.0.0",
        "@angular/forms": "^4.0.0",
        "@angular/http": "^4.0.0",
        "@angular/platform-browser": "^4.0.0",
        "@angular/platform-browser-dynamic": "^4.0.0",
        "@angular/router": "^4.0.0",
        "bootstrap": "^4.0.0-beta",
        "core-js": "^2.4.1",
        "jquery": "^3.2.1",
        "popper.js": "^1.12.5",
        "rxjs": "^5.4.1",
        "zone.js": "^0.8.14"
      },
      "devDependencies": {
        "@angular/cli": "1.2.7",
        "@angular/compiler-cli": "^4.0.0",
        "@angular/language-service": "^4.0.0",
        "@types/jasmine": "~2.5.53",
        "@types/jasminewd2": "~2.0.2",
        "@types/node": "~6.0.60",
        "codelyzer": "~3.0.1",
        "jasmine-core": "~2.6.2",
        "jasmine-spec-reporter": "~4.1.0",
        "karma": "~1.7.0",
        "karma-chrome-launcher": "~2.1.1",
        "karma-cli": "~1.0.1",
        "karma-coverage-istanbul-reporter": "^1.2.1",
        "karma-jasmine": "~1.1.0",
        "karma-jasmine-html-reporter": "^0.2.2",
        "protractor": "~5.1.2",
        "ts-node": "~3.0.4",
        "tslint": "~5.3.2",
        "typescript": "~2.3.3"
      }
    }
    
    11 回复  |  直到 7 年前
        1
  •  53
  •   Loke    7 年前

    看起来你可能一直在看 this 自举示例。我做到了,也有同样的问题。

    问题是这不是一个角度的例子,所以它不起作用。要使其工作,您必须使用 (click) 事件和变量。因此,将模板更改为

    <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
      <a class="navbar-brand" href="#">Dashboard</a>
      <button class="navbar-toggler d-lg-none" type="button" (click)="isCollapsed = !isCollapsed" [attr.aria-expanded]="!isCollapsed" aria-controls="navbarsExampleDefault" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></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="#">Settings</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Profile</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Help</a>
          </li>
        </ul>
        <form class="form-inline mt-2 mt-md-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>
    

    public isCollapsed = true;

    这是一个 plunker

    也就是说,你的分享。单元ts应:

    import { NgModule } from '@angular/core';
    import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap';
    /*Plus all your other modules*/
    
    @NgModule({
      imports: [NgbCollapseModule],
      declarations: [],
      exports: []
    })
    export class SharedModule {}
    
        2
  •  16
  •   Jade Cowan    6 年前

    如果打开终端或命令行并导航到包含 package.json 文件中,运行以下命令:

    npm install --save jquery
    npm install --save popper.js
    npm install --save bootstrap@4.0.0-beta
    

    这些命令将为您的项目安装必要的依赖项。他们在做什么方面相当明确,但如果你需要更新他们在做什么或如何工作,我建议你查看以下文档: npm install here .

    安装后,您需要确保将它们包含在您的中。角度cli。json文件,所以你可以使用它们。

        3
  •  12
  •   Philipp P    7 年前

    https://github.com/twbs/bootstrap/issues/24227

    <nav class="navbar navbar-expand-lg navbar-light bg-light">
      <a class="navbar-brand" href="#">ApplicationName</a>
      <button class="navbar-toggler" type="button" (click)="toggleNavbar = !toggleNavbar">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" [ngbCollapse]="!toggleNavbar">
        <ul class="navbar-nav">
          <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="#">Features</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Pricing</a>
          </li>
          <li ngbDropdown class="nav-item">
            <a class="nav-link" id="navbarDropdownMenuLink" ngbDropdownToggle aria-haspopup="true" aria-expanded="false">
              Dropdown link
            </a>
            <div ngbDropdownMenu aria-labelledby="navbarDropdownMenuLink">
              <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>
      </div>
    </nav>
    
        4
  •  12
  •   Stefan    6 年前

    如上所述,您需要一个属性(例如,isShown,它最初为false) 然后使用

    [ngClass]="{ 'show': isShown }" 
    

    在这里

    <div class="collapse navbar-collapse" [ngClass]="{ 'show': isShown }" id="navbarSupportedContent" >
    

    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-header',
      templateUrl: './header.component.html',
      styleUrls: ['./header.component.css']
    })
    export class HeaderComponent implements OnInit {
    
    
      isShown:boolean = false;
      constructor() { }
    
      ngOnInit() {
      }
      
    }
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
      <a class="navbar-brand" routerLink="/"><img width="20%" src="/assets/logo.svg"></a>
      <button #navbarToggler class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" (click)="isShown = !isShown" [attr.aria-expanded]="isShown"  aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
    
      <div class="collapse navbar-collapse" [ngClass]="{ 'show': isShown }" id="navbarSupportedContent" >
        <ul class="navbar-nav mr-auto">
          <li class="nav-item active">
            <a class="nav-link" (click)="isShown = false" routerLink="/">Home <span class="sr-only">(current)</span></a>
          </li>
          <li class="nav-item">
            <a class="nav-link" (click)="isShown = false" routerLink="/contact">Contact</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" (click)="isShown = false" routerLink="/imprint">Imprint</a>
          </li>
        </ul>
      </div>
    </nav>
        5
  •  4
  •   Anand Raja    5 年前

    要使切换在角度模式下工作,您只需做4件事

    1. 将切换单击侦听器添加到导航栏开关 (click)="isCollapsed = !isCollapsed"
    2. [attr.aria-expanded]="!isCollapsed" 因此,当您单击(true或false)时,该属性将被更改
    3. 使用属性绑定到ngCollapse的方法相同 [ngbCollapse]="isCollapsed"

    Collapse nav bar without using JQuery

        6
  •  4
  •   Siva Rajesh    4 年前

    它很好用试试这个

    <nav class="navbar navbar-expand-md navbar-light">
      <a>Home</a>
      <button
        class="navbar-toggler d-lg-none"
        type="button"
        data-toggle="collapse"
        (click)="isShown=!isShown"
      >
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" [ngClass]="{ 'show': isShown }">
        <ul class="navbar-nav">
          <li class="nav-item active">
            <a class="nav-link" href="#">About</a>
          </li>
        </ul>
      </div>
    </nav>
    

    import { Component } from '@angular/core';
    
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css'],
    })
    export class AppComponent {
      // title = 'WebApp';
      isShown = false;
    }
    
        7
  •  1
  •   Surya R Praveen    5 年前

    这对我有用!!!

    应用程序。组成部分html

    <nav class="navbar navbar-expand-lg justify-content-between">
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation" id="navButton">
        <i class="fa fa-bars"></i>
      </button>
      <div class="row">
        <div class="collapse navbar-collapse" id="navbarSupportedContent">
          <ul class="navbar-nav ml-auto">
            <li class="nav-item" *ngFor="let menu of mainmenu, let i = index">
              <a class="nav-link" (click)="findIndex(i)" routerLink="/{{menu.href}}">{{menu.icon}} {{menu.text}}</a>
              <ng-container *ngIf="menu.children && menu.children.length > 0">
                <span class="d-block d-sm-none"><i class="fa fa-chevron-down" aria-hidden="true"></i></span>
              </ng-container>
              <ul class="sub_menu dropdown-menu" [ngClass]="{active : isActive(i)}" *ngIf="menu.children && menu.children.length > 0">
                <li *ngFor="let sub_menu of menu.children"><a class="nav-link" routerLink="/{{sub_menu.href}}" (click)="closeMenu()"><img src="{{sub_menu.icon}}" class="nav-img" /> {{sub_menu.text}}</a></li>
              </ul>
            </li>
          </ul>
        </div>
      </div>
    </nav>
    

    应用程序。组成部分输电系统

    closeMenu() {
        var isMobile = /iPhone|iPad|iPod|BlackBerry|Opera Mini|IEMobile|Android/i.test(navigator.userAgent);
        if (isMobile) {
          document.getElementById('navButton').click();
       }
    }
    
        8
  •  1
  •   Dmitry Grinko    5 年前

    如果有人正在寻找动态切换导航栏的方法 ViewChild

    HTML

    <button #menu class="navbar-toggler d-lg-none" type="button"
        data-toggle="collapse" data-target="#navbarsExampleDefault"
        aria-controls="navbarsExampleDefault" aria-expanded="false"
        aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    

    输电系统

    import { ViewChild, ElementRef } from '@angular/core';
    
    @ViewChild('menu') menu: ElementRef;
    
    toggleMenu() {
        this.menu.nativeElement.click();
    }
    
    closeMenu() {
        const isMenuOpen = this.menu.nativeElement.getAttribute('aria-expanded') === 'true';
        if (isMenuOpen) {
            this.menu.nativeElement.click();
        }
    }
    

    我知道这不是这个问题的答案,但它非常相关,可能会有所帮助。

        9
  •  0
  •   irhetoric    6 年前

    https://github.com/fmorriso/Angular-bootstrap4-nav/tree/master/src/app/navigation

    我在这件事上浪费了太多时间。你必须破解Angular才能让它工作;这不仅仅是版本错误等问题。

        10
  •  0
  •   George Makroglou    5 年前

    我不知道这是否仍然相关,但当我面临这个问题时,帮助我的是停止live server,然后重新编译应用程序,并用ng serve再次启动它。有时,当您在服务器运行时安装依赖项时,从角度看不到这些依赖项。json,即使您插入了它们。也许对未来的用户来说

        11
  •  0
  •   Tejashree    5 年前

    引导-4.4.1,Angular cli:7.3.9

    最简单的方法是在客户端入口点导入js包:

    导入“bootstrap/dist/js/bootstrap”。束';线到“polyfills”。ts的文件