我使用以下代码使用 md-select 材料组件根据特定条件更新模型值。当我第一次选择特定选项时,即 md-select 组件中的 tacos-2,当时模型值正确更新。但之后再次选择相同的选项,即 md-select 组件中的 tacos-2,当时模型值无法正确更新。
app.component.ts:-
export class App {
name:string;
foods = [
{value: 'steak-0', viewValue: 'Steak'},
{value: 'pizza-1', viewValue: 'Pizza'},
{value: 'tacos-2', viewValue: 'Tacos'}
];
selectedValue: string = this.foods[0].value;
constructor() {
this.name = `Angular! v${VERSION.full}`
}
onFoodChanged(event) {
if(this.selectedValue == "tacos-2") {
this.selectedValue = "pizza-1";
}
event.value = this.selectedValue;
console.log(event)
}
}
app.component.html:-
<md-select placeholder="Favorite food" [(ngModel)]="selectedValue" name="food"
(change)="onFoodChanged($event)">
<md-option *ngFor="let food of foods" [value]="food.value">
{{food.viewValue}}
</md-option>
</md-select>
演示:- https://plnkr.co/edit/rugT0PtmpP1gtHDzWReY?p=preview
如何更新 md-select 组件更改事件上的模型值?
change)事件绑定到值更改。如果要检查模型更改,请改用 (ngModelChange)。但在这两种情况下,如果值/模型没有实际更改,您的 (onFoodChanged) 将被解雇。因此,如果您希望检测何时选择某个选项,最好检查(单击)选项上的事件:
<md-select placeholder="Favorite food" [(ngModel)]="selectedValue" name="food">
<md-option (click)="onFoodChanged($event)" *ngFor="let food of foods"
[value]="food.value">
{{food.viewValue}}
</md-option>
</md-select>
演示
我在 md-select 更改事件中使用了 setTimeout() 函数。现在我的模型值正在正确更新。
onFoodChanged(event) {
setTimeout(()=> {
if(this.selectedValue == "tacos-2") {
this.selectedValue = "pizza-1";
}
}, 0);
}
演示:- https://plnkr.co/edit/iZFmK0Kfui9NSeYybk8Q?p=preview