【问题标题】:navbar not rendering in browser using ng-bootstrap & angular 4导航栏未使用 ng-bootstrap 和 Angular 4 在浏览器中呈现
【发布时间】:2017-08-07 17:21:52
【问题描述】:

我正在使用 ng-bootstrap(Angular 的 Bootstrap 4)构建我的第一个 Angular 4 应用程序 - 不使用常规 Boostrap

ng-bootstrap 网站 (https://ng-bootstrap.github.io/#/components/accordion/api) 没有列出导航栏的组件(就像在 Bootstrap 3 或常规 bootstrap 4 中所做的那样)。这是否意味着我必须用下拉菜单/按钮构建菜单?或者我必须将常规 Bootstrap 4 与 ng-bootstrap 混合使用?

我尝试在 html 中创建此菜单,但它不会在浏览器中呈现(只是一个品牌“MyWebSiteName”和我屏幕上的小灰色框,没有导航)

<nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">MyWebSiteName</a>
    </div>
     <div class="collapse navbar-collapse" id="myNavbar">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Home</a></li>
        <li class="dropdown">
          <a class="dropdown-toggle" data-toggle="dropdown" href="#">Page 1 <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Page 1-1</a></li>
            <li><a href="#">Page 1-2</a></li>
            <li><a href="#">Page 1-3</a></li>
          </ul>
        </li>
        <li><a href="#">Page 2</a></li>
        <li><a href="#">Page 3</a></li>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#"><span class="glyphicon glyphicon-user"></span> Sign Up</a></li>
        <li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
      </ul>
    </div>
  </div>
</nav>

我的 HTML 有什么问题吗?或者有人有与 ng-bootstrap 一起使用的导航栏示例吗?

【问题讨论】:

  • 您是否将Bootstrap CSS 添加到您的项目中?
  • 是的 - NgbCheckbox 正在完美呈现,因此 ng-bootstrap 组件正在工作。只是上面的资产净值不是

标签: angular ng-bootstrap


【解决方案1】:

由于没有导航组件,您需要结合使用 ng-bootstrap 的 ngbCollapse 组件的折叠功能以及 NgbDropdown 组件的下拉功能。

您需要将ngbCollapse 的实例绑定到div.collapse.navbar-collapse 和组件类的布尔属性。 ng-bootstrap 对data-* 没有任何用处,因此您可以删除data-toggle="collapse" 等属性。

您可以通过组件类上的属性控制折叠菜单的打开/关闭状态,该属性通过单击事件之类的方式切换true/false。在此示例中,通过button.navbag-toggler 上的(click) 事件处理程序进行切换,在组件toggleMenu() 上执行一个方法,该方法只是通过! 运算符反转布尔属性isCollapsed 的值。

对于菜单项下拉菜单,您将使用NgbDropdown 组件。您将属性 ngbDropdownngbDropdownToggle 分别应用于容器元素和切换元素。

<div class="nav-item dropdown" ngbDropdown>
  <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" ngbDropdownToggle>
    Dropdown
  </a>
  <div class="dropdown-menu" aria-labelledby="dropdownBasic1">
    <button class="dropdown-item">Action - 1</button>
    <button class="dropdown-item">Another Action</button>
    <button class="dropdown-item">Something else is here</button>
  </div>
</div>

就 Bootstrap 4 navbar 的样式而言,您需要使用以下类:

导航栏需要用 .navbar-toggleable-* 包裹 .navbar 响应式折叠和配色方案类。

在 Bootstrap 4 中,button.navbar-toggle 等元素现在是带有“r”的button.navbar-toggler。您使用类 navbar-inversebg-inverse 来作为标准反向导航栏。

HTML:

<nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse">
  <button class="navbar-toggler navbar-toggler-right" type="button" aria-controls="appNavigation" [attr.aria-expanded]="!isCollapsed" aria-label="Toggle navigation" (click)="toggleMenu()">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href="#">My App</a>
  <div class="collapse navbar-collapse" id="appNavigation" [ngbCollapse]="isCollapsed">
    <div class="navbar-nav mr-auto">
      <a class="nav-item nav-link" routerLink="" routerLinkActive="active">Home</a>
      <a class="nav-item nav-link" routerLink="/about" routerLinkActive="active">About</a>
      <div class="nav-item dropdown" ngbDropdown>
        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" ngbDropdownToggle>
            Dropdown
        </a>
        <div class="dropdown-menu" aria-labelledby="dropdownBasic1">
          <button class="dropdown-item">Action - 1</button>
          <button class="dropdown-item">Another Action</button>
          <button class="dropdown-item">Something else is here</button>
        </div>
      </div>
    </div>
  </div>
</nav>

TS:

export class NavigationComponent {
  isCollapsed = true;

  constructor() {}

  toggleMenu() {
    this.isCollapsed = !this.isCollapsed;
  }
}

这是一个plunker,展示了实际的功能和样式。

【讨论】:

  • 谢谢!这有很大帮助。但是有一个问题,将动画添加到打开和关闭导航窗格的最佳方法是什么?就像在这个演示中一样(动画由 jQuery 完成):blackrockdigital.github.io/startbootstrap-logo-nav
  • @MehmetGunacti 用于折叠和类似组件的动画目前在 ng-bootstrap 中似乎不可用。您需要使用 Angular - Animations 之类的东西来为折叠或 CSS3 过渡的属性设置动画。我会避免尝试使用 jQuery。
  • index.html 中的 unpkg.com 是什么?另外,config.js 中的内容是什么?我有关于 Angular 5 的 ng-book,但我认为那里没有……
  • @mikeglaz unpkg 是 npm 包的 CDN。 unpkg 专门用于 plunker 示例,因为它通常是为了公共示例/演示而下拉必要依赖项的最快方法。如果您使用内置模板在 plunker 中创建一个空白的 Angular 2+ 项目,它将自动生成一个带有 cdn 引用的index.html。在实际的生产应用程序中,您最好使用某种构建过程以最有效的方式打包所有依赖项。谢谢!
  • 谢谢。也许只有我一个人,但为了使您的 HTML 正常工作,我必须进行以下更改: 1 - 链接 My App 应该在
【解决方案2】:

不要使用 ng-Bootstrap,而是尝试使用 Angular。

小例子

模板

<nav class="navbar navbar-toggleable-md navbar-light bg-faded  navbar-fixed-top">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown"
    aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation" (click)="isActive = !isActive"> // add this for the responsive button
    <span class="navbar-toggler-icon"></span>
  </button>
  <a routerLink="/home"><img src="angular.png" class = "myImage" alt="Image"/></a>
  <div class="collapse navbar-collapse" id="navbarNavDropdown" [ngClass]="{show : isActive}">
    <ul class="navbar-nav">
      <li class="nav-item dropdown" [routerLinkActive]="['active']" appDropdown> // add this directive for the dropdown
        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Basic Concepts
        </a>
.....

指令

 import {Directive, HostListener, HostBinding} from '@angular/core';

  @Directive({
    selector: '[appDropdown]'
  })
  export class DropdownDirective {

    private isOpen:boolean = false;

    @HostBinding('class.open') get opened(){
      return this.isOpen;
    }
    constructor() { }

    @HostListener('click')open(){
      this.isOpen = true;
    }

    @HostListener('mouseleave')close(){
      this.isOpen = false;
    }

相同的工作示例顶部的导航栏是使用引导程序和 Angular 指令 Link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多