2017-09-27 52 views
1

RxJs 5.4.3如何實現類似於使用.ofArrayChanges()可以實現的模式? (這是不是在5.4.3函數).ofArrayChanges()替代RxJS 5.4.3

http://jsfiddle.net/ablochs/6jr6syhz/1/

var arr = [1,2,3]; 
var source = Rx.Observable.ofArrayChanges(arr); 

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); }, 
    function (e) { console.log('Error: ' + e); }, 
    function () { console.log('Completed'); }); 

arr.push(4) 

RxJs .from operators docs

+0

這不會在RxJS 5中實現,因爲'Array.observe'被標記爲過時的https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/Array/observe – martin

+0

好吧,如何創建一個可用的函數的類似結構?我正在尋找一種方法來訂閱一個最初被填充的數組。 – 2083

+0

那麼你需要在每個數組修改時發出一個新的值,或者只是用這個數組的初始值創建observable? –

回答

1

因爲Array.observe的是過時的,我建議你到你的整個狀態RxJS建模。下面是從文檔教程 - Creating applications with RxJS

和實施你的情況:

const onPush$ = new Rx.Subject(); 
 
const onChange$ = new Rx.Subject(); 
 

 
const initialValue = [1, 2, 3]; 
 
const series$ = Rx.Observable 
 
    .merge(
 
    onPush$.map(value => 
 
     series => { 
 
     series.push(value); 
 
     return series; 
 
     } 
 
    ), 
 
    onChange$.map(({ index, value }) => 
 
     series => { 
 
     series[index] = value; 
 
     return series; 
 
     } 
 
    ) 
 
) 
 
    .scan(
 
    (series, makeNew) => makeNew(series), 
 
    initialValue 
 
); 
 
    
 
    
 
series$.subscribe(v => console.log(v)); 
 

 
console.log('push 10'); 
 
onPush$.next(10); 
 

 
console.log('change 0th to be 9'); 
 
onChange$.next({ index: 0, value: 9 }); 
 

 
console.log('push 1000'); 
 
onPush$.next(1000);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

另一個哈克,但還是有可能的解決方案是使用ES6 Proxy。類似的東西 - Getter/setter on javascript array?