Angular 角度2-绑定与订阅

Angular 角度2-绑定与订阅,angular,rxjs,Angular,Rxjs,我有一个维护上下文属性的服务 @Injectable() 导出类MyService{ 构造函数(私有http:http){} //服务中保存上下文的变量/getter _当前上下文:任何; get currentContext(){返回此值。_currentContext;} //服务中获取上下文的方法 fetchContext(){ 返回此值。_http.get(`/api/xxx`).map(response=>response.json()); } 现在,组件可以注入此服务,并且组件模板

我有一个维护上下文属性的服务

@Injectable()
导出类MyService{
构造函数(私有http:http){}
//服务中保存上下文的变量/getter
_当前上下文:任何;
get currentContext(){返回此值。_currentContext;}
//服务中获取上下文的方法
fetchContext(){
返回此值。_http.get(`/api/xxx`).map(response=>response.json());
}
现在,组件可以注入此服务,并且组件模板中的元素可以直接绑定到上下文。只要上下文发生更改,这些绑定就会作为更改检测的一部分进行更新

当上下文发生变化时,若我想在组件中运行一些逻辑,该怎么办

@组件({
选择器:“我的cmp”,

模板:`我经常使用
BehaviorSubject
来提供这类服务:

导出类MyService{
private contextSubject=new BehaviorSubject(null);
context$=this.contextSubject.asObservable();
获取上下文(){
返回this.contextSubject.value;
}
...
}

根据需要,您可以使用
context
context$

就是这样做的。对于相对解耦的服务,有助于维护
context
变量和
context$
可观察,因此您可以始终在它们之间进行选择。
context
的适当性取决于observable应该是冷的还是热的(示例没有显示observable订阅的位置,但这一部分非常重要)。使用ngrx并定义具有多个属性的存储。