【问题标题】:(change) event is not firing if you change [checked] value programmatically angular如果您以编程方式更改 [checked] 值,则 (change) 事件不会触发
【发布时间】:2020-01-03 04:27:39
【问题描述】:

我有下面的 HTML 表格正文。在我以编程方式更改 [checked] 值时,在一列中有一个复选框。 (change) 事件没有触发?

<tr *ngFor="let item of Results" [ngClass]="selectClass(item)">
            <td>
                <mat-checkbox
                    type="checkbox"
                    [checked]="isSelected"
                    (change)="onCheck($event, item)"
                ></mat-checkbox>
            </td>
            <td>{{ item.Name }}</td>
            <td>{{ item.Id}}</td>
        </tr></tbody>

【问题讨论】:

  • 代替[checked]="isSelected"试试[(ngModel)]="isSelected"
  • @JasonWhite 尝试使用 [(ngModel)]="isSelected" 但没有结果。

标签: html angular angular-material


【解决方案1】:

发生这种情况是因为您的视图不知道您以编程方式更改了值。甚至可能发生 ExpressionChangedAfterItHasBeenCheckedError。您可以使用 changeDetectorRef 手动检测更改:

constructor(changeDetectorRef: ChangeDetectorRef){
}

select(newValue: boolean): void {
  this.isSelected = newValue;
  this.changeDetectorRef.detectChanges();
}

【讨论】:

  • 尝试使用相同的“ChangeDetectorRef”,但结果对我没有影响。
  • 那么,您可能无法像这样以编程方式设置 mat 复选框的值,而必须使用 ViewChild。在这里查看这个问题是如何解决的:stackoverflow.com/questions/45699783/…(没有设置为重复,因为我的意思是不接受,其他解决方案)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 2021-06-30
  • 2010-11-15
相关资源
最近更新 更多