как закрыть другие открытые выпадающие списки в ngbootstrap

#angular #twitter-bootstrap #angular-ui-bootstrap #dropdown #ng-bootstrap

#angular #twitter-bootstrap #angular-пользовательский интерфейс-bootstrap #выпадающий #ng-bootstrap

Вопрос:

Я использую ngbdropdown в нескольких элементах, подобных этому

 <div *ngFor="let item of items" class="most parent div">
<div (click)="doSomething()">
   <div ngbDropdown [autoClose]="'outside'">
        <button ngbDropdownToggle (click)="$event.stopPropagation();">
            Toggle dropdown 1
         </button>
        <div ngbDropdownMenu>
        <button ngbDropdownItem>Action - 1</button>
   </div>
</div>
<div (click)="doSomething()">
   <div ngbDropdown [autoClose]="'outside'">>
        <button ngbDropdownToggle (click)="$event.stopPropagation();">
            Toggle dropdown 2
        </button>
        <div ngbDropdownMenu>
        <button ngbDropdownItem>Action - 1</button>
   </div>
</div>
</div>
  

В основном некоторая функция вызывается из родительского элемента выпадающего списка.
Чтобы предотвратить вызов родительского элемента (click), я использую $event.stopPropagation() .
Я использовал свойство autoclose ngb-dropdown, чтобы закрыть его, когда пользователь нажимает за пределами его области.

тем не менее, когда я открываю второй выпадающий список, 1-й не закрывается.

есть ли какой-либо способ закрыть любой другой открытый выпадающий список без вызова click события его родителя? в angular? используя ngbDropDown?

Комментарии:

1. Я не могу открыть оба выпадающих списка одновременно! stackblitz.com/edit/angular-cepdv6

2. я не знаю, почему, но. Я могу открыть оба, autoclose установив значение outside

3. Даже в приведенном выше stackblitz?

Ответ №1:

Этот пример может помочь вам

 <div ngbDropdown class="d-inline-block">
  <button class="btn btn-outline-primary" ngbDropdownToggle>{{dropdownMenuName}}</button>
  <div class="dropdown-menu" aria-labelledby="sortMenu">
    <button class="dropdown-item" *ngFor="let sortOrder of sortOrders" (click)="ChangeSortOrder(sortOrder)">
      {{sortOrder}}
    </button>
  </div>
</div>


<div ngbDropdown class="d-inline-block">
  <button class="btn btn-outline-primary" ngbDropdownToggle>{{dropdownMenuName}}</button>
  <div class="dropdown-menu" aria-labelledby="sortMenu">
    <button class="dropdown-item" *ngFor="let sortOrder of sortOrders" (click)="ChangeSortOrder(sortOrder)">
      {{sortOrder}}
    </button>
  </div>
</div>
  

в component.ts

   sortOrders: string[] = ['Year', 'Title', 'Author'];
  dropdownMenuName: string = 'Sort by...';

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

Комментарии:

1. я не понимаю, как это связано с моей проблемой

2. здесь он закрывает 1-й выпадающий список, когда вы открываете 2-й, и он закроется, когда пользователь щелкнет снаружи