我正在创建一个角度v4应用程序。我有以下数据。
currentCount={
name:'myName',
count:0
};
此处,用户将使用相关数据更改上述对象。我想从这个对象中创建一个observable,这样每当有变化时我都可以保存(处理)数据。 此外,我想在订阅observable时传递默认数据。
当我开始使用RXjs时,我感到迷茫。
感谢任何帮助。
答案 0 :(得分:3)
默认情况下,这不适用于RxJS 5,因为它无法观察对象属性。曾经有Object.observe()
但它已停止使用,所以你不应该使用它。
然而(有点自我宣传),我是rxjs-ds
包的作者,它将RxJS 5与window.Proxy
个对象结合起来,让您创建可观察的数据结构(我刨平)将它用于一些实验性的React + Redux应用程序,您只需更改对象属性即可操作state
。
例如,您可以像这样使用它:
import { ObservableObject } from 'rxjs-ds';
const original = {
name: 'myName',
count: 0
};
// Create an observable object from `original`
const proxied = new ObservableObject(original);
const currentCount = proxied.proxy;
const events = proxied.events;
// Create the observer that notifies me when updating object properties
events.onSet.subscribe(console.log);
// Note that I'm in fact modifying `proxied.proxy` and not the original object
currentCount['name'] = 'Rincewind';
currentCount['name'] = 'Twoflower';
currentCount['count'] = 42;
您可以在此处查看实时演示:https://jsfiddle.net/42vp7pmw/3/
打印以控制以下输出:
{property: "name", oldValue: "myName", newValue: "Rincewind", target: {…}}
{property: "name", oldValue: "Rincewind", newValue: "Twoflower", target: {…}}
{property: "count", oldValue: 0, newValue: 42, target: {…}}
答案 1 :(得分:2)
如果想想你想要的是:
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
const subj = new BehaviorSubject('yourValueHere');
Observable<string> obs = subj.asObservable();
obs.subscribe(x => console.log(x));
//logs initial value
subj.next('nextValue');
//logs next value
BehaviorSubject继承自Observable和Observer。您可以在存储主题时从函数/类返回一个observable,如果值更改则调用next。这会发出下一个值,所有订阅者将再次执行。