微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ngbDropdown 不适用于 cdkDrag Angular 11.0.3

如何解决ngbDropdown 不适用于 cdkDrag Angular 11.0.3

ngbDropdown 单击菜单项时未关闭。它的工作很好的外侧 cdkdrag div 但不在 cdkdrag 里面。我尝试删除 cdkDrag 然后它工作正常。我还尝试更改 ngbDropdowncdkDrag 的版本。 使用手动安装 bootstrapjQuery 时它也能正常工作。

解决方法

我在打开下拉菜单的按钮上添加了一个 ID。此外,我创建了一个侦听器,用于跟踪除该按钮之外的任何内容的点击事件。

<div *ngIf="actions?.length">
    <div ngbDropdown class="d-inline-block" [placement]="placement">
        <a id="drBtn" class="font-weight-boldest text-muted text-hover-primary pl-3 pb-3" ngbDropdownToggle>
            . . .</a>
        <div ngbDropdownMenu aria-labelledby="">
            <div *ngFor="let action of actions">
                <button class="dropdown-item"
                        (click)="doAction(action.type)"
                >
                    <span class="navi-icon mr-2" *ngIf="action.icon"><i class="{{action.icon}}"></i></span>
                    {{action.name}}
                </button>

            </div>
        </div>
    </div>
</div>
export class ActionDropdownComponent {
      @Input('placement') placement: string = "";
      @Input('actions') actions: IAction[];
      @Output() onAction: EventEmitter<IAction> = new EventEmitter<IAction>();
      @ViewChild(NgbDropdown) dropdown: NgbDropdown;

      public doAction(action: IAction) {
         this.onAction.emit(action);
     }

     @HostListener('document:click',['$event']) onClick(e) {
        if (e.target.id === 'drBtn') return;
        else
            if (this.dropdown.isOpen())
                this.dropdown.close()
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。