【发布时间】:2019-03-29 07:16:58
【问题描述】:
我想在我的组件发生变化时保持其总量的更新,我想知道这是否正确:
我有一个shared.service.ts,它被注入到我的组件中,所以它看起来像这样(我的共享服务):
shared.service.ts
private sumEmit= new BehaviorSubject<number>(0);
public updateValues() {
this.sum= 0;
this.sum+= +(price*quant).toFixed(2);
this.sumEmit.next(this.sum);
}
获取服务总量的方法:
getTotal(): BehaviorSubject<number> {
return this.sumEmit;
}
那么,每次调用updateValues() 方法,都会发出sum的值,对吗?
在每次更改值时都需要检索值的组件中,我这样做了:
mycomponent.component.ts
首先我注入了共享服务,然后在ngOnInit生命周期hool中我写道:
// simple variable to hold value from service
total : number;
ngOnInit()
{
this.total = this.SharedService.getTotal();
}
这是否意味着每次更改总金额时我的值都是最新的?
对我来说最令人困惑的部分是我在 ngOnInit 中仅调用了一次此方法,该方法在打开组件时呈现,但值会保持更新。有人可以解释一下吗?当服务中的值发生变化时,我的组件中的变量如何知道?哪个部门负责?
谢谢
【问题讨论】:
-
你在哪里使用
total属性? -
@yurzui 我在我的一个组件上使用它来显示总金额的当前值,共享服务中有一个数组,每次我在该数组中添加值或其他人时,我都会调用方法 updateValues它会发出总计,并且我会在需要时将其显示在少数组件上..
-
你是像
{{total}}还是{{total | async}}一样使用它? -
@Roxy'Pro 我用您在 cmets 中提出的一些问题更新了我的答案。我希望现在更清楚了。如果有不明白的地方请告诉我:)
标签: angular service components observable behaviorsubject