2017-02-10 19 views
2

ng-bootstrap NgbDropdownには、選択したボタンのテキストをどのように表示して、最初に表示されたデフォルトのテキストをユーザーが選択したアイテムに置き換えますか?ドロップダウンから選択項目を表示するようにNgbDropdownを設定する方法

以下の例では、ユーザーが選択するソートオプションを表示することを目標としています。

<div ngbDropdown class="d-inline-block"> 

    <button class="btn btn-outline-primary" id="sortMenu" ngbDropdownToggle>Sort by...</button> 

    <div class="dropdown-menu" aria-labelledby="sortMenu"> 
    <button class="dropdown-item">Year</button> 
    <button class="dropdown-item">Title</button> 
    <button class="dropdown-item">Author</button> 
    </div> 

</div> 

ありがとうございました!

答えて

5

例コンポーネント:

import {Component} from '@angular/core'; 

@Component({ 
    selector: 'dropdown-demo-sortby', 
    template: ` 
    <div ngbDropdown class="d-inline-block"> 
     <button class="btn btn-outline-primary" id="sortMenu" ngbDropdownToggle>{{selectedSortOrder}}</button> 
     <div class="dropdown-menu" aria-labelledby="sortMenu"> 
     <button class="dropdown-item" *ngFor="let sortOrder of sortOrders" (click)="ChangeSortOrder(sortOrder)" >{{sortOrder}}</button> 
     </div> 
    </div> 
    ` 
}) 
export class DropdownDemoSortby { 

    sortOrders: string[] = ["Year", "Title", "Author"]; 
    selectedSortOrder: string = "Sort by..."; 

    ChangeSortOrder(newSortOrder: string) { 
    this.selectedSortOrder = newSortOrder; 
    } 

} 
+1

助ける、あなたが私の答えを受け入れる場合、私は(...私はまだこのアカウントに十分な評判を持っていないので、あなたが投稿溶液に直接コメントすることはできません)。しかし、あなたは* ngForを間違った場所に置いてしまいます。divタグを複写するときは、複数のボタンをすべて持っていたいと思うときにボタンを押します。また、イベントのクリック時のHTMLではなく、ボタンのクリック(クリック)を使用して、クリックイベントにAngularバインドを設定する必要があります。最後に、各ボタンに「ID」を使用する場合は、それらを一意にする必要があります。現在、すべてのボタンは* ngForのために同じid値を持ちます。 –

+0

ありがとう、ロブ!これは、* ngForの場所についての素晴らしい点です。あなたのソリューションはよりクリーンなHTMLをもたらします。 – TrumanCode

+1

喜んで助けてください。 :)ハッピーコーディング! –

1

私は(blurイベントを使用すると、Firefoxで動作しない)選択されたボタンの上のクリックイベントにフックすることによって、これを解決 - Plunkr demo

コンポーネント:

export class NgbdDropdownBasic { 
    displayMessage = "Sort by..."; 
    sortOptions = ["Balance", "Company", "Last Name"] 

    changeMessage(selectedItem: string){ 
     this.displayMessage = "Sort by " + selectedItem; 
    } 
} 

テンプレートとNgbDropdown:this plunkrで実証

<div ngbDropdown class="d-inline-block"> 

    <button class="btn btn-outline-primary" 
      id="dropdownMenu1" 
      ngbDropdownToggle > 

    {{displayMessage}} 

    </button> 

    <div class="dropdown-menu" id="options" aria-labelledby="dropdownMenu1"> 
     <div *ngFor="let option of sortOptions"> 
     <button class="dropdown-item" 
       id="option" on-click="changeMessage(option)">{{option}}</button> 

     </div> 
    </div> 
    </div> 
関連する問題