How to programatically close ng-bootstrap modal?

匿名 (未验证) 提交于 2019-12-03 02:56:01

问题:

I've got a modal:

<template #warningModal let-c="close" let-d="dismiss">   <div class="modal-header">     <button type="button" class="close" aria-label="Close" (click)="d('Cross click')">       <span aria-hidden="true">&times;</span>     </button>     <h4 class="modal-title">Warning</h4>   </div>   <div class="modal-body">       The numbers you have entered result in negative expenses.  We will treat this as $0.00.  Do you want to continue?   </div>   <div class="modal-footer">     <button type="button" class="btn btn-secondary" (click)="c('Close click')">No</button>     <button type="button" class="btn btn-secondary" (click)="submit()">Yes</button>   </div> </template>

Whenever I click yes, I want it to call a function and close itself.
In my controller, I have @ViewChild('warningModal') warning; and in submit(), I have this.warning.close();, but I get this.warning.close is not a function whenever I click Yes.

How do I get this to work the way I want it to?

回答1:

If you are using https://ng-bootstrap.github.io/ (as indicated in your question) things are extremely simple - you can just open a modal and either close it from a template (as in your code) or programmatically (by calling close() method on the returned NgbModalRef class).

Here is a minimal example showing this in action: http://plnkr.co/edit/r7watmQuyaUQ8onY17Z1?p=preview

You might be either confusing different libraries or maybe there is sth more to your question but it is hard to say more based just on the info provided.



回答2:

To expound upon pkozlowski.opensource's response, the way I actually got the reference to the NgbModalRef class was by modifying what is in his plunker on the this.modalService.open as follows:

this.modalReference = this.modalService.open(content); this.modalReference.result.then((result) => {   this.closeResult = `Closed with: ${result}`; }, (reason) => {   this.closeResult = `Dismissed ${this.getDismissReason(reason)}`; });

Then I was able to call:

this.modalReference.close();

Which worked like a charm. Oh, and don't forget to put define modalReference at the top of the class:

modalReference: any;


回答3:

Unlike TBrenner i couldn't' just use modalReference: any;

I run with:

    "@ng-bootstrap/ng-bootstrap": "^1.0.0-beta.9",     with angular 5

I had to import in my app.module.ts

import { NgbModal } from '@ng-bootstrap/ng-bootstrap';

and of course add it to the providers:

providers[ NgbModal]

once it's done here is the code from the modal component:

 import { Component, Input } from '@angular/core';   import { ModalDismissReasons, NgbModal, NgbModalRef } from '@ng   bootstrap/ng-bootstrap';  export class MyClass { modalReference: NgbModalRef;  constructor(private modalService: NgbModal) open(content) { this.modalReference = this.modalService.open(content); this.modalReference.result.then((result) => {   this.closeResult = `Closed with: ${result}`; }, (reason) => {   this.closeResult = `Dismissed ${this.getDismissReason(reason)}`; }); }  private getDismissReason(reason: any): string { if (reason === ModalDismissReasons.ESC) {   return 'by pressing ESC'; }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!