NG-bootstrap:通过单击处理程序在单独的组件中打开多个模态

问题描述 投票:0回答:1

我最初有一个ng-bootstrap(5.1.4)模态,在我的页面模板中内联打开它的按钮,如下所示:

    <ng-template #basicMessage
                 let-modal>
      <div class="modal-header">
        <h2 id="modal-basic-title"
            class="modal-title">Modal headline</h2>
        <button type="button"
                class="close"
                aria-label="Close"
                (click)="modal.dismiss('Close icon clicked')">
          <span aria-hidden="true"></span>
        </button>
      </div>
      <div class="modal-body">
        <p>Lorem ipsum dolor sit amet, duo ei volumus perfecto ocurreret, nam et volutpat explicari hendrerit.</p>
      </div>
    </ng-template>

    <button class="btn btn-primary mb-3"
            (click)="open(basicMessage, { ariaLabelledBy: 'modal-basic-title' })"
            matRipple>
      View Demo
    </button>

此页面上有几个模态演示,每个都有不同的模板标签,例如#singleChoiceActionModal#basicMessage

现在,我想将每个模式移动到其自己的组件中,并通过viewdemo按钮调用该模式,并传递要打开的演示名称。问题是,一旦将上述模态ng-template移到其自己的组件中,就可以了:

import { Component } from '@angular/core';

@Component({
  selector: 'app-ngmodal-basic',
  template: `
    <ng-template #basicMessage let-modal>
      <div class="modal-header">
        <h2 id="modal-basic-title" class="modal-title">Modal headline</h2>
        <button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Close icon clicked')">
          <span aria-hidden="true"></span>
        </button>
      </div>
      <div class="modal-body">
        <p>
          Lorem ipsum dolor sit amet, duo ei volumus perfecto ocurreret, nam et volutpat explicari hendrerit.
        </p>
      </div>
    </ng-template>
  `,
  styles: []
})
export class NgmodalBasicComponent {}

然后将该组件添加到我的演示页中,如

    <app-ngmodal-basic></app-ngmodal-basic>

    <button class="btn btn-primary mb-3"
            (click)="open(basicMessage, { ariaLabelledBy: 'modal-basic-title' })"
            matRipple>
      View Demo
    </button>

背景弹出,但没有模式。

由于这有点令人困惑,所以我进行了Stackblitz:https://stackblitz.com/edit/angular-rvsxpz

javascript angular bootstrap-modal ng-bootstrap
1个回答
0
投票

您必须将模板引用传递给open方法的第一个参数。但是在您的示例中,您传递的是undefined,这就是为什么它不起作用。您必须先获取app-ngmodal-basic模板引用,然后将该引用传递给open方法。要获取app-ngmodal-basic模板参考,请使用ViewChild,然后在app-ngmodal-basic上添加模板变量以获取访问权限

© www.soinside.com 2019 - 2024. All rights reserved.