ngx-bootstrap How to open a modal from another component?

后端 未结 3 1401
[愿得一人]
[愿得一人] 2021-01-11 17:03

What I\'m trying to do is open a modal from another component, however I keep getting this error TypeError: Cannot create property \'validator\' on string \'test1\'

相关标签:
3条回答
  • 2021-01-11 17:14

    If you're trying to open a Modal Component from another Component, then this is the right way to do it with ngx-bootstrap:

    import { Component } from '@angular/core';
    import { BsModalService } from 'ngx-bootstrap/modal';
    import { BsModalRef } from 'ngx-bootstrap/modal/modal-options.class';
    
    /* This is the Component from which we open the Modal Component */
    @Component({
      selector: 'my-component',
      templateUrl: './service-component.html'
    })
    export class MyComponent {
      bsModalRef: BsModalRef;
      constructor(private modalService: BsModalService) {}
    
      public openModalWithComponent() {
        /* this is how we open a Modal Component from another component */
        this.bsModalRef = this.modalService.show(ModalContentComponent);
      }
    }
    
    /* This is the Modal Component */
    @Component({
      selector: 'child-modal',
      template: `
        <div class="modal-header">
          <h4 class="modal-title pull-left">Title</h4>
          <button type="button" class="close pull-right" aria-label="Close" (click)="bsModalRef.hide()">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          ...
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" (click)="bsModalRef.hide()">Close</button>
        </div>
      `
    })
    export class ChildModalComponent {
      constructor(public bsModalRef: BsModalRef) {}
    }
    

    template of the Component which is calling the Modal:

    <button type="button" class="btn btn-primary" (click)="openModalWithComponent()">Create modal with component</button>
    

    So you should NOT include the Modal Component in the template like this:

     <child-modal #childModal ></child-modal>
    

    Official doc:

    https://valor-software.com/ngx-bootstrap/#/modals#service-component

    0 讨论(0)
  • 2021-01-11 17:18

    you only need to add your child-component into the entryComponents in your module like this:

    entryComponents: [
        childComponent
    ]
    

    it works for me

    0 讨论(0)
  • 2021-01-11 17:25
    If you use same component then, 
    
    HTML #
        <button (click)="openModalWithComponent()">open</button>
    
        // for display purpose
        <ng-template #template>
          <div class="modal-body">
          </div>
        </ng-template>
    
    COMPONENT #
    import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';
    import { BsModalService } from 'ngx-bootstrap/modal';
    import { ViewChild, ElementRef } from '@angular/core';
    
          bsModalRef: BsModalRef;
    constructor(private modalService: BsModalService) {}
          @ViewChild('template') elementView: ElementRef;
        openModalWithComponent() {    
            this.bsModalRef = this.modalService.show(this.elementView);
            // this.bsModalRef.content.closeBtnName = 'Close';
            // (click)="bsModalRef.hide()"
    
        }
    
    0 讨论(0)
提交回复
热议问题