我一直在試驗feathersjs和angular2/Rx。 我想要實現的是構建一個angular2服務,以這種方式包裝一個feathersjs服務,以便人們可以訂閱一個Observable,在任何類型的CRUD之後發出最新的項目集。使用'CRUD-Observables'有效維護一組對象
它基本上工作。但是,我不覺得它的做法非常優雅: 包裝和解開所有進入的對象似乎效率不高。我是否'一切都很流'太過分?
getService(){
let data$: Observable<any> = Observable.from([initialSetOfItems]);
let created$: Observable<any> = Observable.fromEvent(feathersService, 'created').map(o => {return {action: 'c', data: o}});
let updated$: Observable<any> = Observable.fromEvent(feathersService, 'updated').map(o => {return {action: 'u', data: o}});
let removed$: Observable<any> = Observable.fromEvent(feathersService, 'removed').map(o => {return {action: 'r', data: o}});
return data$
.merge(created$, updated$, removed$)
.scan((arr: any[], newObj) => {
switch (newObj.action){
case 'c':
return [].concat(arr, newObj.data);
case 'u':
let indexToUpdate = arr.findIndex((element) => (element.id === newObj.data.id));
if (indexToUpdate > -1){
arr[indexToUpdate] = newObj.data;
}
return arr;
case 'r':
return arr.filter(element => (element.id != newObj.data.id))
}
});
}
我知道這可能是自以爲是的。請多多包涵。 Rx有點難以纏繞你的頭。
你們會怎麼做到這一點?
這就是我該怎麼做的。除了你的更新情況,你實際上是在修改陣列......我建議在應用更新之前克隆陣列。 – Brandon
你是對的,謝謝! – j2L4e