javascript - NG- Bootstrap : open multiple modals in separate components from one click handler

标签 javascript angular bootstrap-modal ng-bootstrap

我最初有一个 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

最佳答案

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

试试这个

ng-model-basic.component.ts

export class NgmodalBasicComponent {
  @ViewChild("basicMessage", { static: false })
  public basicMessage: TemplateRef<any>;
  constructor() {}
}

hello.component.html

<app-ngmodal-basic #modal></app-ngmodal-basic>

   <button class="btn btn-primary my-5 d-block"
                (click)="open(modal.basicMessage, { ariaLabelledBy: 'modal-basic-title' })"
                matRipple>
         Open Basic Message Modal
    </button>

Forked Example

关于javascript - NG- Bootstrap : open multiple modals in separate components from one click handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59773320/

相关文章:

Javascript - 关闭模态后聚焦于元素

javascript - 使用 Javascript 在遍历单位圆时绘制正弦波

javascript - JS Date 不是以前导 0 开头 - 可能重复的问题

angular - 当不同的字段更改值时如何重新触发验证器

javascript - 如何使脚本标签适应 Angular?

javascript - 未使用模态 Bootstrap 和 codeigniter 插入数据

javascript - 注册模态限制

javascript - 如何自动 "click"

javascript - 是否可以自动密封JS对象?

angular - 我们在 mat-tooltip 中没有动态内容选项吗?