【问题标题】:Problems with *ngFor and MatDialog in AngularAngular 中 *ngFor 和 MatDialog 的问题
【发布时间】:2020-04-05 23:29:39
【问题描述】:

我目前正在构建一个 Angular 网站。我使用 *ngFor 循环创建了几个组件。每个创建的组件都有一个鼠标事件,应该使用该事件打开 MatDialog (MatDialog)。问题是对话框没有正确打开,里面的按钮也不起作用。但是,只要我删除 *ngFor 循环并仅代表第一个元素,对话框就会完美运行。 有谁知道这个问题以及如何解决它或 *ngFor 循环的替代方法?

不起作用:

<div *ngFor="let item of elements">
       <div (mousedown)="openMatDialog($event)" class="title">{{item.title}}</div>
</div>

功能:

<div>
    <div (mousedown)="openMatDialog($event)" class="title">{{elements[0].title}}</div>
</div>

函数 openMatDialog(e):

openMatDialog(e) {
    const matDialog = this.dialog.open(
        SettingsDialogComponent, { hasBackdrop: true }
    );
}

提前致谢

解决方案:在 *ngFor 循环中使用 trackBy

【问题讨论】:

  • 也请分享你的功能。
  • 您应该为您的问题添加复制堆栈闪电战,以便我们可以帮助您stackblitz.com
  • 这个程序的复制相对困难,因为它非常广泛。

标签: angular angular-material ngfor


【解决方案1】:

我过去也遇到过这个问题。也许这会有所帮助: Mat-Button click inside a *ngFor with let index = index does not react/fire action

解决方案:将 .html 模板中的 form.controls.credentials?.value 替换为 form.get('credentials').controls 即可解决问题。之后,垫子按钮再次在 *ngFor 中工作。

【讨论】:

  • 我现在不知道怎么用,因为我不使用
    。你能更准确地向我解释一下吗?
  • form.controls.credentials?.value 是从 getter 收到的,而另一个值 form.get('credentials').controls 让我直接引用。也许你可以检查一下。
  • 没有人可以重现您的问题。您指的是我们没有任何上下文的值。
  • 如果您期待一个正确的答案,我们应该期待一个正确的问题。
  • 对不起,你完全正确。在您发送给我的链接中,您还调用了 trackBy 的可能性,这完全解决了我的问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 2021-09-14
  • 2016-11-28
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
相关资源
最近更新 更多