从Object创建一个observable以及一个起始值

时间:2018-01-16 12:36:38

标签: angular rxjs observable rxjs5

我正在创建一个角度v4应用程序。我有以下数据。

currentCount={
name:'myName',
count:0
};

此处,用户将使用相关数据更改上述对象。我想从这个对象中创建一个observable,这样每当有变化时我都可以保存(处理)数据。 此外,我想在订阅observable时传递默认数据。

当我开始使用RXjs时,我感到迷茫。

感谢任何帮助。

2 个答案:

答案 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。这会发出下一个值,所有订阅者将再次执行。