javascript - 将动态数据传递给子组件

标签 javascript angular typescript rxjs

我有一个子组件

export class AlertComponent implements OnInit {
  @Input() messageData: string | string[];

  constructor() { }

  ngOnInit(): void {

  }
}

我有一个父组件,在模板中我使用上面的组件

<app-alert *ngIf="!!alertsCount" [type]="'danger'"
       [messageData]="alertMessageData"></app-alert>


<mat-select class="select--width--130" (selectionChange)="changeAlertType($event)" [(value)]="alertType" placeholder="Alert Types">
  <mat-option *ngFor="let alertType of alertTypes" [value]="alertType.name">
    {{ alertType.name }}
  </mat-option>
</mat-select>

在父组件ts中

getAlertMessageData(alertType: string) {
  switch (alertType) {
    case 'firing':
    case 'silenced':
    case 'resolved':
      this.alertMessageData = `There are ${this.alertsCount} ${alertType} alerts`;
      break;
    case 'all':
      this.alertMessageData = `There are ${this.alertsCount} alerts`;
      break;
  }
  console.log(this.alertMessageData);
}

changeAlertType(event: MatSelectChange) {
  this.alertType = event.value;
  this.getAlertMessageData(event.value);}

但是,当我更改警报类型的选择时,消息数据不会更新,如何传递 messageData 以便在更改 mat-select 后更新消息数据?

最佳答案

我从代码中看到您正在传递字符串或字符串数​​组。当您传递字符串时,只要您能够从父组件正确发送数据,您就可以使用 ngOnChanges 检测更改。

当您传递数组时,您需要更改引用,因为数组是一个对象,并将通过引用传递,并且即使您使用ngOnChanges, Angular 变化检测也不会检测到对其的任何更改。

当您使用ngOnchanges时,您可以在@Input上使用set属性并设置该属性并运行changeDetection。

export class ChildComponent implements OnChanges {
  @Input() set messageData: any = [];

  ngOnChanges(changes) {
    // code here
    // make changes here
  }
}

我建议您阅读this 。变化检测如何工作?

关于javascript - 将动态数据传递给子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68637318/

相关文章:

javascript - 如何用 date-fns 格式化日期?

javascript - 在 onHeadersReceived 上修改标题

Angular ng 测试模块未找到 : Error: can't resolve

javascript - HTML 表单 onsubmit 有时仅起作用

javascript - 如何使用货币管道获取组件中最多两位小数的值?

angular - 我的硬件 'Back Button Action' 在 Ionic 4 中不工作

javascript - 按文件扩展 Monaco Editor 提示

typescript 类引用

javascript - 为什么在带有 Chrome 的 Android 上进行地理定位时,标题保持为 "null"

javascript - d3v4 checkout 图表 - 确保图例和圆圈的配色方案正确