ngx-bootstrap popover не работает должным образом - PullRequest
1 голос
/ 10 апреля 2019

Я использую ngx-bootstrap popover . Я хочу, чтобы поповер открывался при наведении, а все открытые должны быть закрыты, если открывается новый.

рабочий пример

В соответствии с требованием, которое я хочу выше, образец должен управляться родительским компонентом, а целевой элемент popover находится в дочернем компоненте. Мне нужно это для требования модульности

Демонстрация ngFor в дочернем компоненте html это неверная демонстрация

Обновленная демоверсия ngFor в родительском компоненте html

родительский компонент

export class DemoPopoverFourDirectionsComponent  implements 

AfterViewInit{
  @ViewChildren(PopoverDirective) popovers: QueryList<PopoverDirective>;

  ngAfterViewInit() {
    this.popovers.forEach((popover: PopoverDirective) => {
      popover.onShown.subscribe(() => {
        this.popovers
        .filter(p => p !== popover)
        .forEach(p => p.hide());
      });
    });
  }

varArr=[1,2,3,4]

}

В поповере есть кнопки, которые нужно нажимать. Если я использую триггеры = "mouseenter: mouseleave", я не могу нажимать кнопки внутри всплывающего окна

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Я изменяю твой код и надеюсь, что это то, что тебе нужно

здесь

ОБНОВЛЕНИЕ :

вот окончательный код

0 голосов
/ 10 апреля 2019

Просто установите triggers="mouseenter:mouseleave"

См .: https://ng -bootstrap.github.io / # / components / popover / examples # триггеры

Обновление:

Из-за новых требований здесь есть измененная версия, которая закрывает старый поповер и позволяет нажимать кнопку внутри:

HTML

<div *ngFor="let d of varArr; let i = index">
    <button type="button" class="btn btn-default btn-secondary"      
          #pop="bs-popover"
          [popover]="popover"
          popoverTitle="Popover on top"          
          placement="right" triggers="mouseenter"          
          (onShown)="closeOldPopover(pop)"
          [outsideClick]="true">
    Popover on top
  </button>

  <ng-template #popover>
    <button (click)="pop.hide()">Test</button>
  </ng-template>
</div>

TS

private _currentPopover: any;

@Input() varArr;

ngOnInit() {

}

public closeOldPopover(popover: any): void {
  if (this._currentPopover && this._currentPopover !== popover) {
    this._currentPopover.hide();
  }

  this._currentPopover = popover;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...