2017-06-08 5 views
1

私はRxJsを初めて使っています。私はオブジェクトを観測する必要があります。このオブジェクトが放出できるカスタムイベントをいくつか聞くことができます。私は、この持っているのであれば、たとえば:オブジェクトから複数のイベントを購読するためのRxJのベストプラクティス

class MyObject { 

    constructor() { 
    this.arr = []; 
    } 

    addOne(value) { 
    this.arr.push(value); 
    // fire event ITEM_ADDED 
    } 

    removeLast() { 
    this.arr.splice(-1, 1); 
    // fire event ITEM_REMOVED 
    } 
} 

を私はこのような何かをするために他のコードをしたい:

const myObj = new MyObject(); 
myObj.on('ITEM_ADDED',() => console.log('item added!')); 
myObj.on('ITEM_REMOVED',() => console.log('item removed!')); 

それがこのユースケースのためRxJsを使用するように理にかなっているかだけであれば、私は知りません(私がRxJを使用する前に行っていたように)観測可能なオブジェクトを自分で実装してください。私はMyObjectObservableまで延長しようとしていましたが、イベントを起こす方法が見つかりませんでした。

答えて

1

1つのアプローチは、Subjectを使用することです。

class MyObject { 
    eventStream = new Rx.Subject(); 
    constructor() { 
     this.arr = []; 
    } 

    addOne(value) { 
     this.arr.push(value); 
     this.eventStream.next('ITEM_ADDED') 
    } 

    removeLast() { 
     this.arr.splice(-1, 1); 
     this.eventStream.next('ITEM_REMOVED') 
    } 
} 

myObject.eventStream 
.filter(event => event === 'ITEM_ADDED') 
.subscribe(() => console.log('Item added')) 

myObject.eventStream 
.filter(event => event === 'ITEM_REMOVED') 
.subscribe(() => console.log('Item removed')) 
関連する問題