Невозможно использовать несколько ngbModal в одном компоненте

#javascript #html #angular

#javascript #HTML #угловой

Вопрос:

Я пытаюсь использовать несколько ngbModal в моем угловом компоненте. Я могу успешно открывать и закрывать первый модал. Я получаю сообщение об ошибке при попытке открыть вторую модель. Как это исправить. Пожалуйста, направьте меня.

Когда я нажимаю на кнопку Test1, она показывает мне ошибку. ОШИБКА TypeError: «this.modalService не определен»

HTML

 <button (click)="onClick($event)"></button>
<ng-template #firstTemplate let-modal>
  <div class="modal-footer">
  
    <button type="button" class="btn  btn-primary" (click)="onTest1($event); modal.close('Save click')">test1</button>
  
  </div>
</ng-template>

<ng-template #secondTemplate let-modal>
  <div class="modal-footer">
  
    <button type="button" class="btn  btn-primary" (click)="onTest2($event); modal.close('Save click')">test2</button>
  
  </div>
</ng-template>
  

TS

 @ViewChild('firstTemplate', {static: true}) firstTemplate: TemplateRef<any>;
  @ViewChild('secondTemplate', {static: true}) secondTemplate: TemplateRef<any>;
  @ViewChild('disabledEsc', {read: TemplateRef, static: true}) disabledEscTemplate: TemplateRef<HTMLElement>;

constructor(private modalService: NgbModal) {}

 onClick(event) {
    event.srcElement.blur();
    event.preventDefault();
    this.modalService.open(this.firstTemplate, {
      windowClass: 'ngb-modal',
      size: 'lg', scrollable: true, centered: true, backdrop: 'static',
    });

  onTest1(event) {
    console.log(event);
    event.srcElement.blur();
    event.preventDefault();
    setTimeout(this.testModal, 500);
  }

  testModal() {
    this.modalService.open(this.secondTemplate, { //   error
      windowClass: 'ngb-modal',
      size: 'lg', scrollable: true, centered: true, backdrop: 'static',
    });
  }
}


  

Ответ №1:

У вас ошибка, что modalService не определен, потому что, когда testModal метод выполняется с помощью setTimeout, this контекст не установлен для экземпляра вашего компонента.

чтобы исправить это, вы можете использовать функцию со стрелкой :

 setTimeout(() => this.testModal(), 500);
  

или вы можете привязать этот контекст функции testModal к вашему компоненту :

 const boundTestModal = this.testModal.bind(this);
setTimeout(boundTestModal , 500);