Вот код компонента Angular, который можно запустить по адресу https://plnkr.co/edit/eEXt9JD3OO5rRl3p37Je?p=preview
@Component({
selector: 'my-app',
template: `
<div *ngIf="currentNumber$ | async as currentNumber">
<b>{{currentNumber}}</b>
</div>
<form [formGroup]="simpleForm">
<input type="number" formControlName="number" />
</form>
`,
})
export class App {
primeNumbers$ : Observable<number>;
simpleForm : FormGroup;
constructor() {
this.primeNumbers$ = Observable.from([3,5,7]);
this.simpleForm = new FormGroup({
number : new FormControl(1);
})
}
get currentNumber$() : Observable<number>{
return this.primeNumbers$.filter(n=>n===this.simpleForm.controls["number"].value);
}
}
Он работает по желанию: когда я набираю одно из 3,5,7 числа во вводе формы, оно появляется в верхней части формы, что означает, что currentNumber $ observable обновляется, когда элемент управления "number" изменяет свое значение. Как это вообще возможно? Как angular понимает, когда в этой ситуации обновлять наблюдаемое? Допустим, асинхронный канал подписывается на наблюдаемый. Но как компонент понимает, что новое наблюдаемое значение должно выдаваться при изменении значения элемента управления формы? есть только ссылка на элемент управления формы, и он глубоко спрятан в предикате фильтра