Angular Material对话框:当父组件中的注入数据更改时,如何更新它们?

比利·G:

将数据注入到材质对话框中效果很好,但是如果父/打开器组件中的数据发生更改(例如来自(WAMP)订阅),如何自动更新这些数据呢?

[更新]
我创建了一个最低版本以尝试如何操作:https ://stackblitz.com/edit/angular-njh44v?embed=1&file=src/app/app.component.ts
打开右下角的控制台并单击带有数字的灰色框。您会看到对话框获取了当前编号,并且此后不再进行更新。
[/更新]

[更新2]
基于第二个“ Jusmpty”的想法,这种连接看起来一目了然(即使对话框在数据到达后第一次显示/更新):https ://stackblitz.com/edit/angular-thd34f?embed = 1&file = src / app / app.component.ts
[/ Update]

具体情况如下:

  • 有一个区域组件订阅WAMP服务并获取包含部分的所有数据这将使用* ngFor 绘制所有零件文件area.component.ts
  • 每个部分都有一个自己的组件,其中显示一些数据如果订阅中数据发生更改,则将针对每个/所有部分正确,自动地更新视图
    文件part.component.tspart.component.html
  • 单击每个部分都会打开一个对话框,其中显示了更多数据。
    文件part-details-dialog.component.tspart-details-dialog.component.html

在最后一个动作/步骤上,将发生以下问题:当前数据正在显示(注入),但如果订阅数据中的某些内容发生更改,则不再更新。

area.component.ts

@Component({
  selector: 'app-area',
  template: '<app-part *ngFor="let part of plan" [partData]="part"></app-part>'
})
export class AreaComponent {

  plan = [];

  planasync$ = this.wampService
    .topic('sendplan')
    .subscribe(
      res => {
        let tm = new TableMap();
        this.plan = tm.tableToMap(res.argskw).filter((m) => m.area === 1);
      },
      err => console.log("res err", err),
      () => console.log("res complete"));

  constructor(private wampService: WampService) { }
}

part.component.ts

import { PartDetailsDialogComponent } from './part-details-dialog/part-details-dialog.component';

@Component({
  selector: 'app-part-details',
  templateUrl: './part.component.html'
})
export class PartComponent {
  @Input() partData: any;

  constructor(public dialog: MatDialog) {}

  openDetailsDialog(): void {
    let dialogRef = this.dialog.open(PartDetailsDialogComponent, {
      width: '650px',
      height: '400px',
      data: {
        partData: this.partData
      }
    });
  }
}

part.component.html

<mat-card (click)="openDetailsDialog()">
  <mat-card-title>Nr: {{ partData.partNr }}</mat-card-title>
  <mat-card-content>
      <div>Current speed: {{ partData.speed }}</div>
  </mat-card-content>
</mat-card>

part-details-dialog.component.ts

@Component({
  selector: 'app-part-details-dialog',
  templateUrl: './part-details-dialog.component.html'
})
export class PartDetailsDialogComponent {

  constructor(public dialogRef: MatDialogRef<PartDetailsDialogComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { }

  onNoClick(): void {
    this.dialogRef.close();
  }
}

part-details-dialog.component.html

<h1 mat-dialog-title>Part Details for Nr. {{ data.partData.partNr }}</h1>
<div mat-dialog-content>
  <div>Current speed details: {{ data.partData.speed }}</div>
</div>
<div mat-dialog-actions>
  <button mat-button (click)="onNoClick()">Cancel</button>
  <button mat-button [mat-dialog-close]="data.animal" cdkFocusInitial>Ok</button>
</div>
penghui :

您可以只更改data组件实例,如下所示:

this.dialogRef.componentInstance.data = {numbers: value};

此处的示例:https : //stackblitz.com/edit/angular-dialog-update

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular Material对话框:afterClosed之后更改后,如何更新表行中的数据?

取消对话框时更新数据 - Angular Material

如何从 angular 的对话框组件传递和访问数据?

如何将数据从 HTTP GET API 传递到 angular 中的 mat 对话框组件

如何在 Angular 的对话框中显示输入更改?

从angular 4材质对话框中调用父组件函数

没有对话框组件类的Angular Material viewchild对话框

在 Angular Material 自定义对话框中显示组件

如何使用Nebular对话框组件将数据传递到Angular组件?

数据没有进入 Angular Material 对话框

在组件的Angular 6中隐藏Bootstrap对话框

重新使用 angular 6 中的对话框组件

如何在基于Angular组件的架构中处理对话框

如何在Angular4的PRIMENG中的对话框组件的标题中创建按钮

如何将服务变量传递到Angular Material对话框中?

没有组件的 Angular 对话框

Angular对话框中的表单-对话框关闭后获取表单数据

如何关闭Angular对话框?

Angular 7材质对话框配置数据注入名称冲突

如何创建一个可以从 Angular 11 中的任何组件调用的确认对话框?

更新打开的Angular Material 2对话框的宽度或高度

测试在调试元素之外注入的 Angular 对话框窗口

如何使用 angular 9 中的 Angular 材质制作持久对话框(模态框)?

如何从angular2中的子组件更新父组件

如何在Angular 2中从子组件更新父组件

Angular 中的动态注入,将组件注入父组件

Angular:如何捕获复选框更改事件并更新非父组件中的内容

Angular4 PrimeNG对话框作为组件

摆脱Angular Material模态对话框周围的空白