导航栏不使用 ng-bootstrap & angular 在浏览器中呈现 4
navbar not rendering in browser using ng-bootstrap & angular 4
我正在构建我的第一个 Angular 4 应用程序,使用 ng-bootstrap(Bootstrap 4 for Angular)——不使用常规的 Boostrap
ng-bootstrap 网站 (https://ng-bootstrap.github.io/#/components/accordion/api) 没有列出导航栏的组件(就像在 Bootstrap 3 或常规 bootstrap 4 中那样)。这是否意味着我必须用 dropdowns/buttons 构建菜单?或者我必须将常规 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 一起使用的导航栏示例吗?
由于没有导航组件,您需要结合使用折叠功能 ng-bootstrap 的 ngbCollapse component as well as the dropdown functionality from the NgbDropdown 组件。
您需要将 ngbCollapse
的实例绑定到组件 class 上的 div.collapse.navbar-collapse
和布尔值 属性。 ng-bootstrap 对 data-*
没有任何用处,因此您可以删除 data-toggle="collapse"
.
等属性
您可以通过组件 class 上的 属性 控制折叠菜单的 open/close 状态,该组件 true
/false
通过类似的方式切换点击事件。在此示例中,通过 button.navbag-toggler
上的 (click)
事件处理程序进行切换,在组件 toggleMenu()
上执行一个方法,该方法简单地反转布尔值 属性 isCollapsed
通过!
运算符。
对于菜单项下拉菜单,您将使用 NgbDropdown 组件。您可以将属性 ngbDropdown
和 ngbDropdownToggle
分别应用于容器元素和切换元素。
<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 的样式而言,您需要使用以下 classes:
Navbars require a wrapping .navbar with .navbar-toggleable-* for
responsive collapsing and color scheme classes.
此外 button.navbar-toggle
等元素现在 button.navbar-toggler
在 Bootstrap 中带有 "r" 4. 您使用 classes navbar-inverse
和bg-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 展示了实际的功能和样式。
尝试使用 Angular 而不是使用 ng-Bootstrap。
小例子
模板
<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;
}
顶部导航栏的工作示例使用 bootstrap 和 Angular 指令 Link
我正在构建我的第一个 Angular 4 应用程序,使用 ng-bootstrap(Bootstrap 4 for Angular)——不使用常规的 Boostrap
ng-bootstrap 网站 (https://ng-bootstrap.github.io/#/components/accordion/api) 没有列出导航栏的组件(就像在 Bootstrap 3 或常规 bootstrap 4 中那样)。这是否意味着我必须用 dropdowns/buttons 构建菜单?或者我必须将常规 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 一起使用的导航栏示例吗?
由于没有导航组件,您需要结合使用折叠功能 ng-bootstrap 的 ngbCollapse component as well as the dropdown functionality from the NgbDropdown 组件。
您需要将 ngbCollapse
的实例绑定到组件 class 上的 div.collapse.navbar-collapse
和布尔值 属性。 ng-bootstrap 对 data-*
没有任何用处,因此您可以删除 data-toggle="collapse"
.
您可以通过组件 class 上的 属性 控制折叠菜单的 open/close 状态,该组件 true
/false
通过类似的方式切换点击事件。在此示例中,通过 button.navbag-toggler
上的 (click)
事件处理程序进行切换,在组件 toggleMenu()
上执行一个方法,该方法简单地反转布尔值 属性 isCollapsed
通过!
运算符。
对于菜单项下拉菜单,您将使用 NgbDropdown 组件。您可以将属性 ngbDropdown
和 ngbDropdownToggle
分别应用于容器元素和切换元素。
<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 的样式而言,您需要使用以下 classes:
Navbars require a wrapping .navbar with .navbar-toggleable-* for responsive collapsing and color scheme classes.
此外 button.navbar-toggle
等元素现在 button.navbar-toggler
在 Bootstrap 中带有 "r" 4. 您使用 classes navbar-inverse
和bg-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 展示了实际的功能和样式。
尝试使用 Angular 而不是使用 ng-Bootstrap。
小例子
模板
<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;
}
顶部导航栏的工作示例使用 bootstrap 和 Angular 指令 Link