在 Observable 中使用 BehaviorSubject。
首先,使用 BehaviorSubject 替代 Observable,代码示例如下:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Model } from './model';
@Injectable()
export class ModelService {
private modelSource = new BehaviorSubject(new Model());
currentModel = this.modelSource.asObservable();
changeModel(model: Model) {
this.modelSource.next(model);
}
}
在上面的代码中,我们创建了一个 BehaviorSubject 对象来代替我们之前使用过的 Observable 对象。我们使用 BehaviorSubject 的原因是因为它可以保存最后一个发出的值,并将其向新订阅者发送。
接下来,我们可以在组件中订阅 BehaviorSubject:
import { Component, OnInit } from '@angular/core';
import { ModelService } from './model.service';
import { Model } from './model';
@Component({
selector: 'app-component',
template: `
{{ currentModel | async | json }}
`
})
export class AppComponent implements OnInit {
currentModel: Model;
constructor(private modelService: ModelService) { }
ngOnInit() {
this.modelService.currentModel.subscribe(model => this.currentModel = model);
}
}
在上面的代码中,我们通过直接订阅 BehaviorSubject 来获取最新的 Model 对象。我们使用了 async 管道来获取异步数据并展示在组件模板中。
同样地,我们可以在其他组件或服务中使用我们的 ModelService 来获取最新的 Model 对象。