首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获解除事件ngx-bootstrap模式

捕获解除事件ngx-bootstrap模式
EN

Stack Overflow用户
提问于 2019-02-26 16:40:51
回答 3查看 9.8K关注 0票数 5

我使用的是angular 6和ngx-bootstrap 3.0.1

我显示了一个模式,并且我希望当用户在更新表单后尝试关闭模式时,能够显示放弃/取消确认。

当用户使用我的自定义关闭按钮时,我没有问题,但当他在模式之外使用背景单击时,我不知道如何调用我的关闭函数。

如何处理背景单击才能显示我的确认消息?

EN

回答 3

Stack Overflow用户

发布于 2020-10-10 00:36:55

使用选项打开您的模式

代码语言:javascript
复制
this.bsModalRef = this.modalService.show(ExampleModal, {
  ignoreBackdropClick: true,
  keyboard: false
});

在ExampleModal中放置以下代码

代码语言:javascript
复制
ngOnInit(): void {
     document.documentElement.addEventListener('click',  this.hideIfIsBackdropClick.bind(this)); 
}

hideIfIsBackdropClick(event: any): void {
     if (event.target.classList.contains('modal')) {
        this.hide();
     }
}

hide(): void {
   if (anyBooleanHere) {
      this.bsModalRef.hide();
   }
}
票数 1
EN

Stack Overflow用户

发布于 2019-02-26 16:48:13

在ngx-bootstrap文档页面中,您可以很容易地找到解决方案:https://valor-software.com/ngx-bootstrap/#/modals#directive-events

要查看触发了哪些事件,

在您的组件端,

代码语言:javascript
复制
import { Component, ViewChild } from '@angular/core';
import { ModalDirective } from 'ngx-bootstrap/modal';

@Component({
  selector: 'demo-modal-events',
  templateUrl: './events.html',
  styles: [`
    .card {
      margin-bottom: 0.75rem;
      padding: 8px;
    }
  `]
})
export class DemoModalEventsComponent {
  @ViewChild(ModalDirective) modal: ModalDirective;
  messages: string[];

  showModal() {
    this.messages = [];
    this.modal.show();
  }
  handler(type: string, $event: ModalDirective) {
    this.messages.push(
      `event ${type} is fired${$event.dismissReason
        ? ', dismissed by ' + $event.dismissReason
        : ''}`
    );
  }
}

在您的模板方面,

代码语言:javascript
复制
<button type="button" class="btn btn-primary" (click)="showModal()">Open a modal</button>
<br><br>
<pre class="card card-block card-header" *ngFor="let message of messages">{{message}}</pre>

<div class="modal fade" bsModal #modal="bs-modal"
     tabindex="-1" role="dialog" aria-labelledby="dialog-events-name"
     (onShow)="handler('onShow', $event)"
     (onShown)="handler('onShown', $event)"
     (onHide)="handler('onHide', $event)"
     (onHidden)="handler('onHidden', $event)">
  <div class="modal-dialog modal-sm">
    <div class="modal-content">
      <div class="modal-header">
        <h4 id="dialog-events-name" class="modal-title pull-left">Modal</h4>
        <button type="button" class="close pull-right" aria-label="Close" (click)="modal.hide()">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        Just another modal <br>
        Click <b>&times;</b>, press <code>Esc</code> or click on backdrop to close modal.
      </div>
    </div>
  </div>
</div>

更新:

据我所知,您可以像这样检查$event:

代码语言:javascript
复制
if($event.dismissReason == 'backdrop-click')
this.myFunc();
票数 0
EN

Stack Overflow用户

发布于 2020-06-04 05:44:03

您可以使用钩子ngOnDestroy()来检测用户何时关闭模式

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54881399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档