Допустим, у меня есть наблюдаемые

public myObservable$: Observable<SomeModel> | undefined;

И ненаблюдаемый

public myNonObservable: SomeModel | undefined;

И я наполняю его вот так

ngOnInit() {
  this.myObservable$ = ....
}

Как я могу получить данные из myObservable$ и скопировать их в myNonObservable? Потому что такие вещи, как map и object assign, здесь, похоже, не работают.

0
Michaelo 5 Июл 2021 в 13:26

3 ответа

Лучший ответ

Вам нужно subscribe к наблюдаемому. Наблюдаемое - это поток, то есть SomeModel | undefined, который может изменять свое значение со временем. Когда вы подписываетесь на наблюдаемый объект, вы читаете этот поток, предоставляя функцию обратного вызова, которая выполняется каждый раз, когда в поток поступает новое значение.

this.myObservable$.subscribe((model: SomeModel | undefined) => ...)

Если вы подписаны на наблюдаемое, вам также необходимо отказаться от подписки, когда вам больше не нужно слушать наблюдаемое, например когда компонент разрушается. Вы можете сохранить подписку в другой переменной-члене или использовать лучший способ подписки на наблюдаемый объект. Angular предоставляет канал async. Этот канал обрабатывает весь процесс подписки / отказа от подписки за вас. В вашем шаблоне вы можете сделать следующее

<my-other-component [model]="myObservable$ | async">
</my-other-component>

А в OtherComponent вы можете определить @Input, который является непосредственно моделью.

@Component(...)
export class OtherComponent {
  @Input() model: SomeModel|undefined;
}
1
Felix Lemke 5 Июл 2021 в 10:37

Вам нужно подписаться на наблюдаемое:

ngOnInit() {
  this.myObservable$ = ....
  this.myObservable$.subscribe(data => {
     this.myNonObservable = data;
  });
}
1
Ethan Vu 5 Июл 2021 в 10:31
this.myObservable$.subscribe(data=> {
this.myNonObservable = data;
});
1
Mustafa Wali 5 Июл 2021 в 10:32