Angular 2 - 在导航点击时隐藏bootstrap导航栏

Eli*_*kos 7 angular

在移动设备中,单击引导程序导航栏项不会隐藏菜单.

我的菜单按钮,显示手机:

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
Run Code Online (Sandbox Code Playgroud)

搜索此问题返回结果未发布到角度2,我不知道如何实现它们.

当用户点击链接时,如何隐藏导航栏?

<li><a routerLink="/page">Click this should hide nav</a></li>
Run Code Online (Sandbox Code Playgroud)

don*_*tti 6

仅在 Angular 2/4 模板中执行此操作的非常好且简单的方法:

<nav class="navbar navbar-default" aria-expanded="false">
  <div class="container-wrapper">

    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" (click)="isCollapsed = !isCollapsed">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>

    <div class="navbar-collapse collapse no-transition" [attr.aria-expanded]="!isCollapsed" [ngClass]="{collapse: isCollapsed}">
      <ul class="nav navbar-nav" (click)="isCollapsed = !isCollapsed">
        <li [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact: true}"><a routerLink="/">Home</a></li>
        <li [routerLinkActive]="['active']"><a routerLink="/about">About</a></li>
        <li [routerLinkActive]="['active']"><a routerLink="/portfolio">Portfolio</a></li>
        <li [routerLinkActive]="['active']"><a routerLink="/contacts">Contacts</a></li>
      </ul>
    </div>

  </div>
</nav>
Run Code Online (Sandbox Code Playgroud)


Pat*_*ick 5

您可以添加一个为您执行的自定义指令

import { Directive, ElementRef, Input, HostListener } from "@angular/core";

@Directive({
    selector: "[menuClose]"
})
export class CloseMenuDirective {
    @Input()
    public menu: any;

    constructor(private element: ElementRef) { }

    @HostListener("click")
    private onClick() {
        this.menu.classList.remove("show");
    }
}
Run Code Online (Sandbox Code Playgroud)

不要忘记将其添加到声明数组中的app.module中

import { CloseMenuDirective } from './directives/close-menu.directive';
@NgModule({
    declarations: [
        ...declarations,
        CloseMenuDirective
    ]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

然后在HTML中创建对菜单的引用,并将其传递给link元素。

<div class="page-layout">
    <!-- Mark the menu with #menu, thus creating a reference to it -->
    <aside class="collapse navbar-toggleable page-menu" id="navbar-header" #menu>
        <ul class="nav">
            <li class="nav-item">
                <a class="nav-link"
                   [routerLink]="['./somewhere']"
                   routerLinkActive="active"
                   menuClose      <!-- Our custom directive above -->
                   [menu]="menu"> <!-- Bind to menu -->
                    <span>My Link</span>
                </a>
            </li>
        </ul>
    </aside>
</div>
Run Code Online (Sandbox Code Playgroud)


edu*_*edu 5

此代码模拟单击 burguer 按钮以通过单击菜单中的链接关闭导航栏,保持淡出效果。使用 angular 7 的打字稿解决方案。避免 routerLink 问题。

ToggleNavBar () {
    let element: HTMLElement = document.getElementsByClassName( 'navbar-toggler' )[ 0 ] as HTMLElement;
    if ( element.getAttribute( 'aria-expanded' ) == 'true' ) {
        element.click();
    }
}

<li class="nav-item" [routerLinkActive]="['active']">
    <a class="nav-link" [routerLink]="['link1']" title="link1" (click)="ToggleNavBar()">link1</a>
</li>
Run Code Online (Sandbox Code Playgroud)