Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng引导(NgbModal):有没有办法有条件地阻止模式关闭?_Javascript_Angular_Ng Bootstrap - Fatal编程技术网

Javascript ng引导(NgbModal):有没有办法有条件地阻止模式关闭?

Javascript ng引导(NgbModal):有没有办法有条件地阻止模式关闭?,javascript,angular,ng-bootstrap,Javascript,Angular,Ng Bootstrap,我有一个非常基本的模式,用于让用户输入注释 openNotes(conquest) { const modalRef = this.modalService.open(EditNotesModalComponent); modalRef.result.then((result) => { console.log('closed', result); }, (reason) => { console.log('dismissed'

我有一个非常基本的模式,用于让用户输入注释

openNotes(conquest) {
    const modalRef = this.modalService.open(EditNotesModalComponent);
    modalRef.result.then((result) => {
      console.log('closed', result);
    },
    (reason) => {
      console.log('dismissed', reason);
    });
    return modalRef;
}
我想做的是,如果用户在有未完成的便笺时关闭模式,则显示另一个模式,该模式将提醒他们,如果他们关闭模式,将丢失未保存的工作。我希望用户能够选择继续编辑(在这种情况下,第二个模态将关闭,第一个模态将保持打开)或放弃他们的工作(在这种情况下,两个模态都将关闭)

将这样的内容连接到自定义模式关闭操作非常容易,例如用户手动单击通常会关闭模式的按钮。我遇到的问题是,我似乎无法知道用户何时通过单击模态外部或按ESC键解除模态

在AngularJS的UibModal中,您可以通过以下方式捕获此类事件:

$scope.$on('modal.closing', (event) => {
      if (this.newNote.length > 0) {
        event.preventDefault();
        this.openConfirmModal();
      }
});
然后,根据确认模式的解析方式,可以决定关闭模式或保持模式打开。在Angular 4中NgbModal可能有这样的情况吗

谢谢


编辑:我知道NgbModalOptions中的BeforeDisclease函数,但您不能将任何参数传递给此函数。我希望仅当用户在模式中有未完成的注释时,确认模式才会弹出。

您可以使用
@Viewchild
获取模式中输入字段的引用,然后使用
beforeDimiss
功能获取用户键入的文本

下面的示例有一个带有
的模式,当模式被取消时(通过单击背景或按ESC键),文本区域中的值将记录到控制台

HTML

在HTML中,将模板引用变量添加到输入字段:

<div class="modal-body">
  <textarea #myTextarea></textarea>
</div>
open() {
  const modalRef = this.modalService.open(NgbdModalContent, {
     beforeDismiss: () => {
      console.log('The text typed by the user before the modal was dimissed was:')
      console.log(modalRef.componentInstance.textarea.nativeElement.value)
      return true;
    }
  });
}
父组件类型脚本

在打开模态的组件中,添加以下
beforeDimiss
功能。行
modalRef.componentInstance.textarea.nativeElement.value
将从输入字段获取值:

<div class="modal-body">
  <textarea #myTextarea></textarea>
</div>
open() {
  const modalRef = this.modalService.open(NgbdModalContent, {
     beforeDismiss: () => {
      console.log('The text typed by the user before the modal was dimissed was:')
      console.log(modalRef.componentInstance.textarea.nativeElement.value)
      return true;
    }
  });
}

请参阅演示。

可能重复的·let-ngbModalOptions:ngbModalOptions={background:'static',keyboard:false}控制台日志(ngbModalOptions);const modalRef=this.modalService.open(NgbdModalContent,ngbModalOptions)@AhammadaliPK我希望用户能够通过ESC或单击背景关闭模式,但如果他们有任何未保存的工作,我希望显示确认模式。当按ESC时,您无法捕获事件吗?@AhammadaliPK我无法捕获正在按ESC和用户在模式外单击的事件。