Angular - 将可观察的更改为不可观察的

时间:2021-07-05 10:26:27

标签: angular typescript observable ngrx

假设我有可观察的

public myObservable$: Observable<SomeModel> | undefined;

和不可观察

public myNonObservable: SomeModel | undefined;

我就是这样填的

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

如何从 myObservable$ 获取数据并将其复制到 myNonObservable?因为像映射和对象分配之类的东西在这里似乎不起作用。

3 个答案:

答案 0 :(得分:1)

您需要订阅可观察对象:

ngOnInit() {
  this.myObservable$ = ....
  this.myObservable$.subscribe(data => {
     this.myNonObservable = data;
  });
}

答案 1 :(得分:1)

this.myObservable$.subscribe(data=> {
this.myNonObservable = data;
});

答案 2 :(得分:1)

你需要 subscribe 到一个 observable。 observable 是一个流,这意味着 SomeModel | undefined 可以随时间改变其值。当您订阅 observable 时,您会通过提供一个回调函数来读取该流,该回调函数会在每次新值到达该流时执行。

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

如果你订阅了一个 observable,你也需要取消订阅,当你不再需要监听这个 observable 的时候,例如当组件被销毁时。您可以将订阅存储在另一个成员变量中,或者使用更好的方式订阅 observable。 Angular 提供了一个 async 管道。该管道为您处理整个订阅/取消订阅过程。在您的模板中,您可以执行以下操作

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

OtherComponent 中,您可以定义一个直接作为模型的 @Input

@Component(...)
export class OtherComponent {
  @Input() model: SomeModel|undefined;
}