在 Angular 中创建自定义下拉组件

Opti

我正在尝试创建自己的下拉组件。问题是,我的下拉列表有效,但我有一些使用此下拉列表的组件。当我点击他们的切换按钮时,会打开多个下拉菜单实例。为什么会这样?

这里是plunker

我希望一次只看到一个下拉列表实例。我负责关闭/打开下拉菜单的逻辑:

@HostListener('document:click', ['$event'])
clickout($event) {
  if (this.eRef.nativeElement.contains($event.target)) {
    console.log('clicked inside!');
  } else {
    console.log('clicked outside!');
    if (this.isOpen) {
      this.isOpen = false;
    }
  }
}

并切换:

@HostListener('click', ['$event'])
click($event) {
  const { offsetX, clientX, offsetY, clientY } = $event;
  const distances = {
    left: clientX - offsetX,
    top: clientY - offsetY
  };

  $event.stopPropagation();
  this.dropdown.toggle(distances);
}

当一个下拉列表已经打开时,如何防止打开另一个下拉列表实例?我想关闭它并在新的地方打开另一个。

伊本杰伦

$event.stopPropagation();该指令停止事件的传播要由其它下拉部件来处理。

您应该让事件传播并找到另一种方法来关闭下拉列表。可能在指令代码中?

我更新了您的示例以解决报告的问题。

您可以找到更优雅的修复方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Angular 中自定义共享组件

如何在Angular 6中使用ngModel创建自定义输入组件?

如何在Angular 9中创建自定义文本框组件

Angular 6 表中的自定义下拉菜单

Angular中可重用的自定义组件列表

从Angular中的自定义表单组件访问FormControl

在 Angular 7 中的自定义组件上使用 ngClass

自定义组件中的Angular preSelected选项未显示

Angular 6自定义输入组件

需要自定义组件Angular传递

如何在angular中创建自定义指令

在 Angular 中创建自定义表单输入

在Angular 2中创建自定义表单控件

如何在Angular中创建自定义加载屏幕

在Angular | Ionic中没有找到[自定义组件]的组件工厂

Angular Reactive Forms:是否可以创建包含“必须具备”验证的自定义表单控件组件?

如何在angular2中创建自定义命令(在终端上运行)以创建所需组件(包含所需内容)?

自定义下拉列表仅显示所选值Angular

Angular 8:自定义HTML属性在组件html中不起作用

Angular 2:无法通过两种方式绑定在自定义组件中工作

如何在 Angular 中“扩展”和包装自定义组件或本机元素?(以 React 为例)

Angular:子组件中自定义输入的2种方式的数据绑定

自定义Angular组件不会在模板中呈现为TR

CSS 未正确应用于 Angular 中的自定义组件

在angular 2自定义子组件中动态添加和删除formGroup

自定义指令与Angular2中的组件之间的通信

使用angular 6中的自定义错误处理更新组件

如何防止单击Angular 4中的自定义按钮组件

Angular2中列表组件的自定义模板(不包含ng-content的包含)