Angular Mat 对话框没有关闭
Angular Mat Dialog does not close
我有一个不寻常的问题,即我打开的 MatDialog 组件无法在我的 Angular 应用程序中关闭。我不使用 HTML 作为视图,而是在我的调用组件中使用 SVG,处理方式略有不同。不幸的是我不知道问题出在哪里。
这里是调用组件:
CallingComponent.ts
constructor(public dialog: MatDialog) {}
openDetailsDialog() {
const dialogRef = this.dialog.open(NodeDetailsComponent, {
width: '250px',
data: {componentTitle: this.componentTitle},
backdropClass: 'node-details-backdrop'
});
dialogRef.afterClosed().subscribe(result => {
console.log("NodeDetailsDialog closed.");
this.componentTitle = result;
});
}
CallingComponent.svg
<svg:rect [class]="classes" x="50" y="20" rx="20" ry="20"></svg:rect>
<svg:g ng-node-content></svg:g>
<svg (click)="openDetailsDialog()">
<g>
<svg:rect class="test" x="110" y="75" rx="5" ry="5"></svg:rect>
<svg:text x="119" y="90" font-family="Verdana" font-size="15" fill="black">O</svg:text>
</g>
</svg>
<svg:g [baseNode]="baseNode" ng-node-controls></svg:g>
openDetailsDialog() 方法打开对话框,该对话框可以正常工作。只是那时不能关闭。现在跟随被调用的组件:
NodeDetailsComponent.ts
export class NodeDetailsComponent {
constructor(
public dialogRef: MatDialogRef<NodeDetailsComponent>,
@Inject(MAT_DIALOG_DATA) public data: DialogData
) {}
onNoClick(): void {
this.dialogRef.close();
}
}
NodeDetailsComponent.html
<h1 mat-dialog-title>{{data.componentTitle}}</h1>
<div mat-dialog-content>
<p></p>
</div>
<div mat-dialog-actions>
<button mat-button (click)="onNoClick()">Close</button>
</div>
如果需要更多信息来调试这个,那么我很乐意提交!
如果您只想要 to.close 它,无需发送任何值,您可以使用 mat-dialog-close
<button mat-button mat-dialog-close>Close</button>
我设法找到了一个解决方案,这让我有点恼火,因为我没有找到任何关于这个的建议,也没有从我上面的代码片段中得到任何错误或异常。
所以,我们开始吧:我只需要像这样将 BrowserAnimationsModule 添加到我的 @NgModule 导入中:
@NgModule({
declarations: [
...
],
imports: [
MatDialogModule,
BrowserAnimationsModule
],
exports: [
...
]
})
就是这样。这就是全部魔法。
我有一个不寻常的问题,即我打开的 MatDialog 组件无法在我的 Angular 应用程序中关闭。我不使用 HTML 作为视图,而是在我的调用组件中使用 SVG,处理方式略有不同。不幸的是我不知道问题出在哪里。
这里是调用组件:
CallingComponent.ts
constructor(public dialog: MatDialog) {}
openDetailsDialog() {
const dialogRef = this.dialog.open(NodeDetailsComponent, {
width: '250px',
data: {componentTitle: this.componentTitle},
backdropClass: 'node-details-backdrop'
});
dialogRef.afterClosed().subscribe(result => {
console.log("NodeDetailsDialog closed.");
this.componentTitle = result;
});
}
CallingComponent.svg
<svg:rect [class]="classes" x="50" y="20" rx="20" ry="20"></svg:rect>
<svg:g ng-node-content></svg:g>
<svg (click)="openDetailsDialog()">
<g>
<svg:rect class="test" x="110" y="75" rx="5" ry="5"></svg:rect>
<svg:text x="119" y="90" font-family="Verdana" font-size="15" fill="black">O</svg:text>
</g>
</svg>
<svg:g [baseNode]="baseNode" ng-node-controls></svg:g>
openDetailsDialog() 方法打开对话框,该对话框可以正常工作。只是那时不能关闭。现在跟随被调用的组件:
NodeDetailsComponent.ts
export class NodeDetailsComponent {
constructor(
public dialogRef: MatDialogRef<NodeDetailsComponent>,
@Inject(MAT_DIALOG_DATA) public data: DialogData
) {}
onNoClick(): void {
this.dialogRef.close();
}
}
NodeDetailsComponent.html
<h1 mat-dialog-title>{{data.componentTitle}}</h1>
<div mat-dialog-content>
<p></p>
</div>
<div mat-dialog-actions>
<button mat-button (click)="onNoClick()">Close</button>
</div>
如果需要更多信息来调试这个,那么我很乐意提交!
如果您只想要 to.close 它,无需发送任何值,您可以使用 mat-dialog-close
<button mat-button mat-dialog-close>Close</button>
我设法找到了一个解决方案,这让我有点恼火,因为我没有找到任何关于这个的建议,也没有从我上面的代码片段中得到任何错误或异常。
所以,我们开始吧:我只需要像这样将 BrowserAnimationsModule 添加到我的 @NgModule 导入中:
@NgModule({
declarations: [
...
],
imports: [
MatDialogModule,
BrowserAnimationsModule
],
exports: [
...
]
})
就是这样。这就是全部魔法。