У меня есть следующий элемент управления выбором:
<select id="my-select" [(ngModel)]="available" (change)="handleChange($event)">
<option value="true">Available</option>
<option value="false">Unavailable</option>
</select>
Я использую двустороннюю привязку к свойству с именем available
. Я хочу, чтобы пользователь мог установить статус «доступен / недоступен», бэкэнд-метод вызовет API, и в случае сбоя он отобразит сообщение об ошибке и вернет элемент управления выбора в его предыдущее состояние.
Чтобы проверить это, я сделал следующий компонент:
import { TextAttribute } from "@angular/compiler/src/render3/r3_ast";
import { Component, OnInit } from "@angular/core";
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent implements OnInit {
available: boolean;
ngOnInit(): void {
this.available = false;
}
async handleChange(event: Event) {
// ... some process to set status
//oops error happened setting status, lets set it back
this.available = false;
console.log(event);
}
}
Блиц стека: https://stackblitz.com/edit/angular7-playground-sapjc8?file=src/app/app.component.ts
Я ожидаю, что произойдет то, что пользователь выберет доступный, а затем он немедленно станет недоступным, но происходит то, что установка свойства available
не меняет раскрывающийся список.
Что я неправильно понимаю в привязках angular?
handleChange
функции и измените этоavailable
в наблюдателе, он автоматически обновит ваше представление, и вам не нужно будет использоватьsetTimeout
(для теста вы можете использовать что-то, что подделывает запросinterval(1000).pipe(first())
), потому чтоngZone
обезьяны исправляют наблюдаемые. 03.04.2021