Javascript 有没有办法在关闭ng multiselect下拉列表时添加函数?

Javascript 有没有办法在关闭ng multiselect下拉列表时添加函数?,javascript,angular,angular5,Javascript,Angular,Angular5,我正在使用angular 5中的包创建一个多选下拉列表。 我想在关闭或隐藏下拉组件时调用函数 像这样 closeDropdown : function(){ console.log("dropdown close triggered"); } 您可以在(更改)事件中调用该函数 例: 根据文档,您可以通过closeDropDownOnSelectionvaluetrue在完成选择时关闭下拉列表 如果有多个选择,您可以调用(onSelect)=“onItemSelect($event)”

我正在使用angular 5中的包创建一个多选下拉列表。 我想在关闭或隐藏下拉组件时调用函数

像这样

closeDropdown : function(){
   console.log("dropdown close triggered");
}

您可以在
(更改)
事件中调用该函数

例:


根据文档,您可以通过
closeDropDownOnSelection
value
true
在完成选择时关闭下拉列表

如果有多个选择,您可以调用
(onSelect)=“onItemSelect($event)”


有关更多信息,请查看此

,以解决satira发现的错误(由于声誉低下,我无法发表评论),即。 “当具有此多下拉列表的组件第一次打开时,或者您重新加载页面并单击下拉列表之外的任何位置时,将调用onDropDownClose()。”对我来说,这不是第一次之后发生的。无论如何,我通过获取屏幕上任何元素(页眉、页脚或任何div)的id并使用docuement.getElementById('element_id')。单击ngAfterViewInit上的()

ngAfterViewInit(){document.getElementById('header')。单击();}


这确保了我的应用程序不会出现任何副作用。我知道这是一个混乱的解决方案,但由于ng multidropdown的closeDropdown()不起作用,这是我唯一的出路。

我最近遇到了这个问题,并找到了一个结合使用(ngModelChange)和(click)的解决方案。使用ng multiselect下拉菜单时,其他正常HTML元素触发器(模糊)和(更改)不起作用,但(ngModelChange)起作用。唯一的问题是它在初始化时会触发。但是我在(单击)触发器中添加了一个布尔变量,它看起来确实有效

注意,这也适用于onSelect、onDeSelect等

组件1.ts:

...
dropDownSelect: boolean = false;
dropDownSelection: number;
...
saveFunction(event) {
  if(!this.dropDownSelect) return;
  ...
  this.dropDownSelect = false;
}
component.html:

...
<ng-multiselect-dropdown [data]="dataSource" [(ngModel)]="dropDownSelection" [settings]="dropDownSettings" (click)="dropDownSelect = true" (ngModelChange)="saveFunction($event)"></ng-multiselect-dropdown>
...
。。。
...

我尝试了@misterz的解决方案,但没有成功。然而,我修改了它,它的作品完美。 诀窍: 除了(onDropDownClose)外,还可以收听单击事件

 // this act as a differentiator between other calls(bug) and an intended call
 (click)="dropDownSelect = true".
在组件中,声明变量并按如下方式使用:

dropDownSelect = false;

saveFunction($event) {
 if (this.dropDownSelect) {
        // close the opening to subsequent actions 
        this.dropDownSelect = false;
        // Perform action;
 };
}

改变在这里是不可能的。我只需要做近距离的工作。在选择和取消选择时,还有其他功能正在进行。因为如果我使用on(change),即使不需要,它也会调用函数。我想在关闭时在特定条件下调用此函数。请改用
blur
。该库不支持blur。我试图调用模糊函数,但它不会触发任何事件。ng-multiselect-dropdown不提供(模糊)。根据用途(onDropDownClose)。但对我来说,它触发得太频繁了,不仅是在用户关闭UI中的框时,而且是在我单击表单中的其他位置、加载组件以及其他我不希望出现的情况时。CloseDropDownSelection此选项仅适用于单选而非多选。如果将“多次选择”设置为“真”,则每次用户选择一个选项时,它都会关闭下拉列表。编辑检查新答案此处是否存在场景。此事件将触发将增加负载的每个更改。事情就要结束了,我想看看他们中有多少人被选中了。如果列表中只有一个,则调用函数。在这种情况下,如果我每次选择此选项时都使用您建议的解决方案,将检查该函数。必须返回并修改我的答案。显然,该解决方案不仅适用于用户专注于另一个字段,然后删除其中一个多选项的情况。这不会在(ngModelChange)之前触发(单击)。我最后做的是使用[ngModel],这样它就不能从前端修改,然后使用(ngModelChange)=“saveFunction($event)”来检测$event和原始项之间是否有任何更改。这似乎有效。。。
dropDownSelect = false;

saveFunction($event) {
 if (this.dropDownSelect) {
        // close the opening to subsequent actions 
        this.dropDownSelect = false;
        // Perform action;
 };
}