当前位置: 首页 > 知识库问答 >
问题:

ngx引导弹出窗口在外部单击时关闭

虞正业
2023-03-14

我正在尝试创建一个 Angular 4 自定义表单控件作为我的日期选择器。我正在使用ngx-bootstrap,到目前为止,我已经使用ngx-bootstrap的输入,日期选择器和弹出框组件设置了这个自定义表单控件。自定义控件打开一个焦点为日期选取器的弹出窗口,但是,我需要能够通过与弹出框内容交互来更改日期,并且在我不与弹出框或输入交互时它应该关闭。我试图跟踪ngx-bootstrap github问题的黑客攻击。但是它不适用于我的情况。任何帮助将不胜感激。

date-picker.component.html

<input type="text" [value]="getDate() | date:'fullDate'" #popover="bs-popover" [placeholder]="placeholder" class="form-control"  triggers="" (focus)="popover.show()" [popover]="popTemplate" container="body" required>
<template  #popTemplate>
  <datepicker  [(ngModel)]="dt"  [minDate]="minDate" [showWeeks]="true"
               [dateDisabled]="dateDisabled"></datepicker>
</template>

date-picker.component.ts

@Component({
  selector: 'app-date-picker',
  templateUrl: './date-picker.component.html',
  styleUrls: ['./date-picker.component.scss'],
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => DatePickerComponent),
      multi: true
    }
  ]
})
export class DatePickerComponent implements OnInit, ControlValueAccessor {
 @ViewChild('popover') popover;

  isOpen = false;

  @Input('placeholder') placeholder;
constructor(private _er: ElementRef) {
}

  @HostListener('click', ['$event']) onClick(event): void {
    console.log(event);
    if (
      this.isOpen
      && !this._er.nativeElement.contains(event.target)
      && !this.popover._popover!._componentRef!.location.nativeElement!.contains(event.target)
    ) {
      this.hide();
    }
  }

  hide() {
    this.isOpen = false;
    this.popover.hide();
  }

  show() {
    this.isOpen = true;
    this.popover.show();
  }
}

共有1个答案

秦禄
2023-03-14

@HostListener装饰器在Angular API文档中没有描述,但它将事件侦听器绑定到组件主机元素。在您的案例中<代码>

@HostListener('document:click', ['$event'])

我不知道是否有其他支持的前缀,也许是窗口。您可以使用 Plunker 来玩这些事件(来自这个问题)。还有一个关于 HostListener 装饰器含义的问题。

 类似资料:
  • 我有这段代码显示了一个按钮谁显示一个弹出窗口,我希望用户能够关闭弹出窗口点击它的外部时,它是打开的。

  • 问题内容: 我试图手动关闭引导程序弹出窗口,以在单击或不是弹出窗口的任何位置时将其关闭。 我发现最接近完成此操作的方法是创建一个指令,但这是用于手动触发的,如果变量为_true_ 或 false 。 如果我单击非弹出窗口的任何内容,谁能帮助我找出如何关闭它? 我不介意使用jQuery,但我不知道如何调用关闭。 通常可以解决问题,但是我的弹出窗口包含需要单击的内容。我的弹出式窗口内部有一个_焦点,_

  • 我有问题,点击链接从弹出窗口。单击按钮后,弹出窗口显示约3秒: 我正试图通过单击“取消” 和 但是链接没有被点击。我不知道如何断言工作在这个弹出

  • 问题内容: 我通过window.open打开了一个弹出窗口。使用JavaScript打开,我想在关闭此弹出窗口时刷新父页面。(onclose事件?)我该怎么办? 问题答案: 您可以使用“ window.opener”访问父窗口,因此,在子窗口中编写如下内容:

  • 完成表单并点击注册按钮后,我得到一个弹出的信息消息(模态),消息中有close(X)和OK按钮和标题:在ABC Project下,显示了以下内容&通知用户注册成功的文本。 我尝试了几种方法来点击这个弹出窗口中的OK按钮,但都没有成功: 附加提示: null 我很感激你给我的提示和支持谢谢

  • 问题内容: 我已经查了几篇关于同一问题的文章,但似乎无法解决我的问题。我在整个应用程序中都使用了微调器,它们运行良好。当我尝试在弹出窗口中使用微调器时,选择它时出现错误。弹出窗口用于添加引用,并且我已经声明了一个全局ViewGroup变量(即vg_references),该变量可用于在弹出窗口上检索组件。弹出窗口的代码如下。 然后,这将调用一个函数以填充popupwindow中的组件(例如,文本字