Angular BehavioralSubject 未按预期工作
Angular BehavioralSubject not working as expected
我有一项服务可以从 API
中提取数据
import { IStats } from './istats';
export class WebService {
BASE_URL = 'http://localhost:3000/api';
public stats = new BehaviorSubject<IStats>({
date: this.datePipe.transform(new Date(), 'dd-MM-yyyy'),
answeringMachine:0,
hangUp:0,
conversations:0
});
constructor(private http: HttpClient, private datePipe: DatePipe) {
this.getStatsbyDate('04-03-2018');
// this.getStatsbyDate(this.datePipe.transform(new Date(), 'dd-MM-yyyy'));
}
getStatsbyDate(date) {
this.http.get<IStats>(this.BASE_URL + '/stats/' + date)
.subscribe((data: IStats) => {
this.stats.next(data);
});
}
然后我有一个订阅服务中的 BehavioralSubject 的组件。
export class StatsComponent {
private stats: IStats;
constructor(private webService: WebService, private datePipe: DatePipe) {
this.stats = this.webService.stats.getValue();
}
我认为如果后端 API 没有任何数据,那么 behavioralSubject returns 默认值,目前有效,但如果后端确实有数据通过那么怎么办它不是应该用 API 中的值替换默认值吗?
我在这里做错了什么吗?
请指教!
我能够通过对组件代码进行一些更改来解决问题
export class StatsComponent {
private stats: IStats;
constructor(private webService: WebService, private datePipe: DatePipe) {
this.webService.stats$.subscribe(data => {
if (data !== null) { this.stats = data; }
else { this.webService.stats$.next(this.stats); }
})
}
通过这种方式,如果没有来自 API 的数据,BehavioralSubject 会提供来自服务的默认值,反之亦然。
我有一项服务可以从 API
中提取数据import { IStats } from './istats';
export class WebService {
BASE_URL = 'http://localhost:3000/api';
public stats = new BehaviorSubject<IStats>({
date: this.datePipe.transform(new Date(), 'dd-MM-yyyy'),
answeringMachine:0,
hangUp:0,
conversations:0
});
constructor(private http: HttpClient, private datePipe: DatePipe) {
this.getStatsbyDate('04-03-2018');
// this.getStatsbyDate(this.datePipe.transform(new Date(), 'dd-MM-yyyy'));
}
getStatsbyDate(date) {
this.http.get<IStats>(this.BASE_URL + '/stats/' + date)
.subscribe((data: IStats) => {
this.stats.next(data);
});
}
然后我有一个订阅服务中的 BehavioralSubject 的组件。
export class StatsComponent {
private stats: IStats;
constructor(private webService: WebService, private datePipe: DatePipe) {
this.stats = this.webService.stats.getValue();
}
我认为如果后端 API 没有任何数据,那么 behavioralSubject returns 默认值,目前有效,但如果后端确实有数据通过那么怎么办它不是应该用 API 中的值替换默认值吗? 我在这里做错了什么吗? 请指教!
我能够通过对组件代码进行一些更改来解决问题
export class StatsComponent {
private stats: IStats;
constructor(private webService: WebService, private datePipe: DatePipe) {
this.webService.stats$.subscribe(data => {
if (data !== null) { this.stats = data; }
else { this.webService.stats$.next(this.stats); }
})
}
通过这种方式,如果没有来自 API 的数据,BehavioralSubject 会提供来自服务的默认值,反之亦然。