Angular 2 - 在导航上隐藏引导导航栏点击

时间:2016-10-28 10:37:57

标签: angular

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

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

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">

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

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

<li><a routerLink="/page">Click this should hide nav</a></li>

5 个答案:

答案 0 :(得分:4)

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

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");
    }
}

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

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

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

<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>

答案 1 :(得分:2)

这是导航栏的限制(https://github.com/valor-software/ngx-bootstrap/issues/540)。所以你需要操纵DOM元素。

import {MatButtonModule} from '@angular/material/button';
import {MatIconModule} from '@angular/material/icon';
...
@NgModule({
  imports: [
    ...
    MatButtonModule,
    MatIconModule,
  ],
...

在.ts文件中,您的最小代码应为:

<div class="navbar-header page-scroll">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand" routerLink="/">
        <img src="assets/images/logo.png">
    </a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
    <ul class="nav navbar-nav navbar-right" >
        <li class="hidden">
            <a></a>
        </li>
        <li><a routerLink="/" (click)="onMenuClick()">Home</a></li>
        <li><a routerLink="/about" (click)="onMenuClick()">About</a></li> 
    </ul>
</div>

答案 2 :(得分:2)

仅在Angular 2/4模板中执行此操作非常简单明了:

MaskedInputAssets

答案 3 :(得分:1)

此代码模拟单击burguer按钮以通过单击菜单中的链接来关闭导航栏,从而保持淡出效果。带有用于角度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>

答案 4 :(得分:0)

在最新版本的引导程序(4.0)中,您可以使用data-target =“。show”实现所需的功能。 “显示”是连接到可折叠元素以使其可见的类。 示例:

<button class="btn btn-primary" data-toggle="collapse" data-target=".show">Link_1</button>