Как Rx JS Observable может выдать новое значение, если базовый поток событий не излучает новое значение?
Учитывая Angular компонент, который использует асинхронный c pipe
для отображения имени пользователя;
export class MyComponent implements OnInit {
public user$!: Observable<User>;
constructor(private readonly ms: MyService)
ngOnInit() {
this.user$ = this.ms.getUser();
}
}
<ng-container *ngIf="user$ | async as user; else empty">
{{ user.name }}
</ng-container>
<ng-template #empty>
No user here.
</ng-template>
... представьте, что прошло какое-то время, и я хочу попробовать снова вызвать пользователя, вызвав асинхронную функцию this.ms.getUser()
, как я могу это сделать?
AFAIK, я не могу просто перезаписать Observable $captcha
;
export class MyComponent implements OnInit {
public user$!: Observable<User>;
constructor(private readonly ms: MyService)
ngOnInit() {
this.user$ = this.ms.getUser();
}
getUserAgain() {
// Wrong. This would be a new/different Observable.
// The UI would not update.
this.user$ = this.ms.getUser();
}
}
Служба MyService
возвращает Observable, потому что это всего лишь тонкая оболочка вокруг Angular s HttpClient
.