У меня есть <select>
, который пользователь может изменить. Первоначально он имеет значение, и когда пользователь меняет его, я должен запросить ее "are you sure"?
, и в случае, если ответ НЕТ, измените значение <select>
на предыдущее. <select>
привязан к коллекции объектов, а не значений.Angular2 - сбросить значение выбора после изменения пользователем
Лучшее, что я мог придумать до сих пор это:
- в HTML
<select [ngModel]="selectedObj" (ngModelChange)="onSelectedObjChanged($event)">
<option *ngFor="let obj of availableObjs" [ngValue]="obj">{{whatever}}<option>
</select>
- в коде
onSelectedObjChanged(obj) {
if (prompt answer is no) {
let currentlySelectedObj = this.selectedObj;
this.selectedObj = null;
this.changeDetectorRef.detectChanges();
this.selectedObj = currentlySelectedObj;
this.changeDetectorRef.detectChanges();
}
}
Это работает, но уродливо. Почему я это делаю:
- , кажется, нет никакого способа, чтобы отменить выбор событие изменения в DOM
- когда
onSelectedObjChanged
называется и ответ «нет», мне нужно как-то пусть Угловая знать это должен обновить целевую привязку, то есть<select>
... - ... однако я не могу просто установить
this.selectedObj = this.selectedObj
, поскольку значение не изменяется, и никаких изменений не обнаружено угловыми; Вот почему я поставил его вnull
и обратно ... - ... Но даже этого недостаточно, мне нужно, чтобы вызвать
changeDetectorRef.detectChanges()
уведомить Угловая его
Я уверен, что это лучший и это был бы отличный способ сделать это, было бы здорово, если бы вы могли поделиться некоторыми идеями.
Спасибо!
'ngModel' не должен быть записан таким образом =>' [(ngModel)] ' ? – developer033
Он может, но тогда вы не будете уведомлены о том, когда значение изменится, чтобы вы могли запросить пользователя. '[(ngModel)]' расширяется до '[ngModel] = x (ngModelChange) = y' –