2017-09-22 186 views
1

在我的Angular4應用程序中,我創建了一個標準導航欄。當屏幕尺寸減小時,會出現導航菜單下拉菜單。當點擊菜單下拉菜單時,(摺疊)鏈接不顯示。導航菜單下拉菜單不起作用Angular4 Bootstrap 3

問題:如何獲取用於Angular 4 + Bootstrap 3的菜單下拉菜單?

我創建了一個標準組件。這是模板文件:

<nav class="navbar navbar-default"> 
    <div class="container-fluid"> 
    <div class="navbar-header"> 
     <button type="button" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
     <span class="sr-only">Toggle navigation</span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> 
     <a routerLink="/search" class="navbar-brand">Brand-name</a> 
    </div> 

    <div class="collapse navbar-collapse"> 
     <ul class="nav navbar-nav"> 
     <li><a routerLink="/search">Search</a></li> 
     <li><a routerLink="/edit">Edit</a></li> 
     </ul> 
     <ul class="nav navbar-nav navbar-right"> 
     <li><a routerLink="/signup">Signup</a></li> 
     </ul> 
    </div> 
    </div> 
</nav> 

當然,我讀了類似的問題和文章,但沒有人幫助我進一步。大多數是關於自舉而已,不能與角4

+0

引導附帶了崩潰的東西一定的jQuery庫。你有進口嗎? https://getbootstrap.com/docs/4.0/getting-started/introduction/#quick-start – Vega

+0

是的,我將jquery.3.2..0.js和bootstrap.js插入index.html。這是正確的地方嗎?我沒有將header-html作爲index.html的一部分,因爲routerlinks不起作用。我應該通過angular-cli的腳本標記導入它們嗎?請顯示我應該包括的地方。 Workig與單獨的

似乎是一個好方法。 – tjm1706

回答

1

所有的答案到目前爲止演示如何打開下拉菜單。在選擇菜單項後,答案不會顯示如何摺疊該下拉菜單。

感謝Thomas Rundle的基本部分可以在following solution中找到。我添加了一些代碼。該header.component.ts是:

import { Component, OnInit } from '@angular/core'; 
@Component({ 
    selector: 'app-header', 
    templateUrl: './header.component.html', 
    styleUrls: ['./header.component.css'] 
}) 
export class HeaderComponent implements OnInit { 
    isIn : boolean = false; // store state 
    constructor() { } 
    ngOnInit() { 
    } 
    toggleState() { // click handler 
    let bool = this.isIn; 
    this.isIn = bool === false ? true : false; 
    } 
} 

模板header.component.html是:

<nav class="navbar navbar-default"> 
    <div class="container-fluid"> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle collapsed" (click)="toggleState()"> 
     <span class="sr-only">Toggle navigation</span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> <!-- #1 --> 
     <a class="navbar-brand" routerLink="/page1">Project Manager</a> 
    </div> 
    <div class="collapse navbar-collapse in" [ngClass]="{ 'in': isIn }"> 
     <ul class="nav navbar-nav"> 
     <li><a role="tab" (click)="toggleState()" data-toggle="tab" routerLink="/page1">Page 1</a></li> 
     <li><a role="tab" (click)="toggleState()" data-toggle="tab" routerLink="/page2">Page 2</a></li> 
     </ul> 
    </div> <!-- #2 --> 
    </div> 
</nav> 
0

https://plnkr.co/edit/oSKnNWXNafbMjCiPwqrv?p=preview

,因爲你有目標=「#導航欄」,你必須設定目標的ID導航欄爲它工作的結合。

<nav class="navbar navbar-default"> 
     <div class="container-fluid"> 
      <div class="navbar-header"> 
       <button type="button" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
        <span class="sr-only">Toggle navigation</span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       <a routerLink="/search" class="navbar-brand">Brand-name</a> 
      </div> 

      <div id="navbar" class="collapse navbar-collapse"> 
       <ul class="nav navbar-nav"> 
        <li><a routerLink="/search">Search</a></li> 
        <li><a routerLink="/edit">Edit</a></li> 
       </ul> 
       <ul class="nav navbar-nav navbar-right"> 
        <li><a routerLink="/signup">Signup</a></li> 
       </ul> 
      </div> 
     </div> 
    </nav> 
+0

謝謝。當我嘗試響應時,下拉菜單在中到大屏幕上不會消失。你可以看到沒有你的代碼的行爲。因爲它是一個故障碼通用代碼,你能進一步幫助嗎? – tjm1706

1

引導程序下拉顯示增加了一類開放<ul>元素下拉出現和關閉,您可以利用角指令到同一個行爲添加到組件。

應用下拉指令

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

它堅持你UL <ul class="nav navbar-nav" appDropdown>

的工作Example Code

+0

謝謝。點擊漢堡時,菜單打開。好。 問題 - 點擊菜單項,如何關閉它? – tjm1706

+0

@ tjm1706我的代碼有鼠標離開eveny。您需要爲此添加其他事件。這本身就是一個新問題,因爲你需要檢查點擊來自哪裏 –

+0

Sighn - 點擊菜單項是真正的問題。我嘗試了許多不同的方法。請幫忙。當然,由於屏幕的大小,當出現下拉菜單時,這當然僅適用於小屏幕。 – tjm1706