Может кто-нибудь объяснить мне, почему в следующем примере @Input
имеет значение null, если я обращаюсь к нему в ngOnInit
OtherComponent (вызов http был успешным)?
Некоторые компоненты:
@Component({
selector: 'some-component',
template: `<other-component [data]="observable$ | async"></other-component>`,
styles: [``] })
export class SomeComponent {
observable$: Observable<any>;
ngOnInit(): void {
observable$ = this.http.get(...); // service call via angular httpClient
}
Другой компонент:
@Component({
selector: 'other-component',
template: `<div>...</div>`,
styles: [``] })
export class OtherComponent {
@Input()
data: any;
ngOnInit(): void {
// if I access this.data here, it is null
}
Согласно документации angular, асинхронный канал подписывается на наблюдаемое и возвращает последнее значение, которое он выдал. . Итак, я подумал, что асинхронный канал будет передавать результат http-вызова, а не нуль.
Если я использую *ngIf, результат http-вызова передается вниз, а не нулевой.
<other-component *ngIf="observable$ | async as observable" [data]='observable'>
Пример Stackblitz: