这是我的理论服务:
@Injectable({
providedIn: 'root'
})
export class DataService {
@Output() data: EventEmitter<number> = new EventEmitter();
constructor() {
setInterval(() => {
this.data.emit(Math.random());
}, 1e3);
}
}
我的组件:
ngOnInit() {
this.sub = this.dataService.data.subscribe(data => this.data = data);
}
ngOnDestroy() {
this.sub.unsubscribe();
}
效果很好,当我收到新数据时。 但是如何更改我的DataService以在订阅后立即提供数据。 我的意思是,我想存储最后一个数据(在理论上是随机数),并在订阅后立即提供。 使用rxjs甚至有可能吗?
答案 0 :(得分:3)
不要使用事件发射器代替主题,不能保证始终遵循可观察的合同
不要在服务中使用输出,它仅适用于组件和指令
使用一种行为,使新订阅者在订阅时立即获得最后发出的值
将主题设为私人并公开可见的良好做法
像这样:
@Injectable({
providedIn: 'root'
})
export class DataService {
private data: BehaviorSubject<number> = new BehaviorSubject(null); // initialize to whatever
data$: Observable<number> = this.data.asObservable();
constructor() {
setInterval(() => {
this.data.next(Math.random()); // use next for subjects
}, 1e3);
}
}