Search code examples
angulartypescriptsmartadmin

How handle a button in typescript in dynamic code


I'm working with the Smart Admin Angular Version, When I want to use from notificationService I have a problem.

I cant handle pressed button in notificationService.smallBox.

My code in like bellow:

notificationExample5() {

  this.notificationService.smallBox({
    title: "Ding Dong!",
    content: "Someone's at the door...shall one get it sir? <p class='text-align-right'><a href-void class='btn btn-primary btn-sm'>Yes</a> <a href-void class='btn btn-danger btn-sm'>No</a></p>",
    color: "#296191",
    //timeout: 8000,
    icon: "fa fa-bell swing animated"
  });
}

How I cant handle 'YES' or 'NO' button in Angular?


Solution

  • You can have multiple ways to achieve it.

    try https://stackoverflow.com/a/43065100/8179245 already answered solution.

    Or use this stackbliz created for you https://stackblitz.com/edit/angular-confirmation-dialog-1i8zgw?file=app/app.component.ts

    App Component Ts

    import { Component } from '@angular/core';
    
    import { ConfirmationDialogService } from './confirmation-dialog/confirmation-dialog.service';
    
    @Component({
      selector: 'my-app',
      templateUrl: './app.component.html',
      styleUrls: [ './app.component.css' ]
    })
    export class AppComponent  {
      constructor(private confirmationDialogService: ConfirmationDialogService) {}
    
      public openConfirmationDialog() {
        this.confirmationDialogService.confirm('Please confirm..', 'Do you really want to ... ?')
        .then((confirmed) => console.log('User confirmed:', confirmed))
        .catch(() => console.log('User dismissed the dialog (e.g., by using ESC, clicking the cross icon, or clicking outside the dialog)'));
      }
    }
    

    App Component HTML

    <button (click)="openConfirmationDialog()" type="button" class="btn btn-primary">Open dialog</button>
    
    <p>Open the console to see log statements.</p>
    

    Confirm Box TS

    import { Component, Input, OnInit } from '@angular/core';
    import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
    
    @Component({
      selector: 'app-confirmation-dialog',
      templateUrl: './confirmation-dialog.component.html',
    })
    export class ConfirmationDialogComponent implements OnInit {
    
      @Input() title: string;
      @Input() message: string;
      @Input() btnOkText: string;
      @Input() btnCancelText: string;
    
      constructor(private activeModal: NgbActiveModal) { }
    
      ngOnInit() {
      }
    
      public decline() {
        this.activeModal.close(false);
      }
    
      public accept() {
        this.activeModal.close(true);
      }
    
      public dismiss() {
        this.activeModal.dismiss();
      }
    
    }
    

    Confirm Box HTML

    <div class="modal-header">
      <h4 class="modal-title">{{ title }}</h4>
        <button type="button" class="close" aria-label="Close" (click)="dismiss()">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        {{ message }}
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-danger" (click)="decline()">{{ btnCancelText }}</button>
        <button type="button" class="btn btn-primary" (click)="accept()">{{ btnOkText }}</button>
      </div>
    

    Confirm Box Service

    import { Injectable } from '@angular/core';
    import { Observable } from 'rxjs/Observable';
    
    import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
    
    import { ConfirmationDialogComponent } from './confirmation-dialog.component';
    
    @Injectable()
    export class ConfirmationDialogService {
    
      constructor(private modalService: NgbModal) { }
    
      public confirm(
        title: string,
        message: string,
        btnOkText: string = 'OK',
        btnCancelText: string = 'Cancel',
        dialogSize: 'sm'|'lg' = 'sm'): Promise<boolean> {
        const modalRef = this.modalService.open(ConfirmationDialogComponent, { size: dialogSize });
        modalRef.componentInstance.title = title;
        modalRef.componentInstance.message = message;
        modalRef.componentInstance.btnOkText = btnOkText;
        modalRef.componentInstance.btnCancelText = btnCancelText;
    
        return modalRef.result;
      }
    
    }