Angular2 切换/打开 ng2-select 下拉菜单

Posted

技术标签:

【中文标题】Angular2 切换/打开 ng2-select 下拉菜单【英文标题】:Angular2 toggle/open ng2-select dropdown 【发布时间】:2018-05-16 02:20:39 【问题描述】:

Angular 4.3+

我正在使用 ng2-select 下拉菜单。

我希望在某些事件上打开下拉菜单。我想触发将打开下拉菜单的事件。

下拉菜单:

<ng-select
        [items]="list"
        [(ngModel)]="modelName"
        placeholder="Select">
</ng-select>

当用户单击下拉列表时,它会获得焦点并显示列表。我希望这发生在不同按钮上的某些点击事件上。

到目前为止我所尝试的:

this.elElementRefng-select 元素。 (正确获取 ng-select 的元素引用,它会在控制台记录我试图触发事件的正确元素。)

    当用户点击它时它会打开,我试图触发一个元素的点击事件。 this.el.nativeElement.click(); 试图在 .ui-select-toggle 元素上触发点击事件。 this.el.nativeElement.querySelector('.ui-select-toggle').dispatchEvent(new Event('click')); 同样,我尝试触发focus 事件但没有成功。

有没有其他方法可以触发 ng-select 元素上的某些事件,这些事件会关注 ng-select 并打开下拉菜单。

【问题讨论】:

【参考方案1】:

我在 setTimeOut 函数中封装了 click 事件触发代码,如下所示,它现在工作正常。

setTimeout(() => 
     this.el
         .nativeElement
         .querySelector('.ui-select-toggle')
         .dispatchEvent(new Event('click'));
);

.ui-select-toggle 是该元素在单击时会切换下拉菜单,所以我想如果我在该元素上触发单击事件,它将切换/打开下拉菜单。

所以我尝试了以下(没有 setTimeOut 包装器)

this.el
         .nativeElement
         .querySelector('.ui-select-toggle')
         .dispatchEvent(new Event('click'));

它什么也没做。但是当我将该代码包装在 setTimeOut 中时,它实际上会触发点击事件,并且我得到了预期的功能。

这里我不确定它为什么会这样,但我相信这与 javascript 有关。

【讨论】:

【参考方案2】:

如果您使用多种模式:

openNg2Select(ng2Select: SelectComponent) 
    setTimeout(() => 
        const ng2 = ng2Select.element.nativeElement.querySelector('.ui-select-search');
        ng2.dispatchEvent(new Event('click'));
    );

html 中:

<ng-select #ng2Select [multiple]="true" [items]="items" (selected)="selected($event)"
           (removed)="removed($event)" placeholder="Please Select" 
           [(ngModel)]="selectedItem">
</ng-select>
<button class="btn btn-pripary" (click)="openNg2Select(ng2Select)>Open ng2-select</button>

【讨论】:

以上是关于Angular2 切换/打开 ng2-select 下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

将 bootstrap 模块和 ng2-select 模块集成到 angular2 5 分钟快速入门

ng2-select 获得漂亮 CSS 的简单方法

在 ng2-select2 中使用 AJAX

Angular 2 Select - 从 Web 服务问题中加载数据

ng2-select2 禁用默认值

带有动态 ajax url 选项的 ng2-select2