Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ngx-bootstrap modal: How to get a return value from a modal?

In my Angular 4 app, let's assume that I'm inside a service.

At some point, I want to ask the user for a confirmation, currently I'm doing it with just a confirm(...) request:

const result = confirm('Are you sure?'); 

What if instead I would like to show an ngx-bootstrap modal with, let's say, two buttons "Yes" or "No" and obtain a similar result?


EDIT: in my case, I solved my issue by playing with Subjects. Here you can find my solution, in case it can be useful for someone else. However that solution does not solve this question which is about returning a value from a modal, so I leave it open.

like image 858
Francesco Borzi Avatar asked Sep 25 '17 15:09

Francesco Borzi


1 Answers

Try like this :

myexample it's working correctly. hope this will help you

home.module.ts

import { ModalModule } from 'ngx-bootstrap';  @NgModule({     imports: [         ModalModule.forRoot()     ] }) 

home.component.html

<button class="btn btn-primary" (click)="openConfirmDialog()">Open Confirm box </button> 

home.component.ts

import { BsModalService } from 'ngx-bootstrap/modal'; import { BsModalRef } from 'ngx-bootstrap/modal/modal-options.class';  export class HomeComponent {     public modalRef: BsModalRef;     constructor(         private homeService: HomeService,         private modalService: BsModalService     ) { }      openConfirmDialog() {         this.modalRef = this.modalService.show(HomeModalComponent);         this.modalRef.content.onClose.subscribe(result => {             console.log('results', result);         })     } } 

home-modal.component.html

<div class="alert-box">     <div class="modal-header">         <h4 class="modal-title">Confirm</h4>         <button type="button" class="close" aria-label="Close" (click)="bsModalRef.hide()">             <span aria-hidden="true">&times;</span>         </button>     </div>     <div class="modal-body">         Are you sure want to delete this node?     </div>     <div class="modal-footer">         <button type="button" class="btn btn-secondary" (click)="onConfirm()">Yes</button>         <button type="button" class="btn btn-secondary" (click)="onCancel()">No</button>             </div> </div> 

home-modal.component.ts

import { Subject } from 'rxjs/Subject'; import { BsModalRef } from 'ngx-bootstrap/modal';  export class HomeModalComponent {     public onClose: Subject<boolean>;      constructor(private _bsModalRef: BsModalRef) { }      public ngOnInit(): void {         this.onClose = new Subject();     }      public onConfirm(): void {         this.onClose.next(true);         this._bsModalRef.hide();     }      public onCancel(): void {         this.onClose.next(false);         this._bsModalRef.hide();     } } 
like image 146
Chandru Avatar answered Sep 28 '22 08:09

Chandru