当用户尝试在 mat-select 中选择另一个值时,我想显示弹出窗口以确认用户是否确实想要选择另一个值。我及时显示弹出窗口的问题是所选值已经出现在垫选择中。在用户决定选择之前,我可以以某种方式阻止该值发生更改吗? 这是示例代码
您基本上需要两件事 - 防止设置值并保持选择的下拉列表打开。
event.stopPropagation()
会做到这一点。在 <option>
中使用 div
占据大部分空间:
<div (click)="$event.stopPropagation()">
<mat-option *ngFor="let val of values" [value]="val">
然后将值设置为控制值,如果确认对话框得到确认,则关闭MatSelect。在这里我分叉了完整实现
我能够通过使用 MatSelectChange source.value 属性解决这个问题。
currentValue = 0;
onSelectionChanged(event: MatSelectChange): void {
//rollback changing
event.source.value = this.currentValue;
//any other actions here e.g. dialog popup or anything else
// set updated value
this.currentValue = event.value;
}
希望这有帮助
更改事件不可取消。
要获得此行为,您应该将值保存到属性,然后在等待结果时将其分配给下拉列表。确认后还应保存所选值并进行分配
previousValue = "Option 1";
new Value = "Option 1";
onValueChanged(e: Event) {
this.newValue = e.value; // stores the furure value
this.someSelectedValue = previousValue; // resets the value back before dialog
this.openDialog();
}
然后
dialogRef.afterClosed().subscribe(result => {
if (res) {
this.someSelectedValue = this.newValue;
}
//this.animal = result;
});