Angular-将来自 NgRx 选择器的值映射到要作为 Observable 返回的对象
Angular-Mapping value from NgRx selector into an object to be returned as an Observable
我想 return 一个可观察对象(第 6 行)作为 DataObject。第 9 行正在监听商店更改,所以当商店发生更改时 - 第 10、11、12 行执行但不是在商店更改之前执行,对吗?或者它会获取存储中的现有值并执行该块(第 10、11、12 行)。
但是,如果存储还没有改变,第 14 行会等到第 10、11、12 行执行,还是 return 第 14 行作为空对象? 如果我想监听更改我该怎么办 -> 将数据从存储映射到 DataObject 并return它作为可观察的,而不是在那之前?
class DataObject {
propA: string = '';
propB: string = '';
propC: SecondDataObject;
}
getDataModel(): Observable<DataObject> {
let data = new DataObject();
this.store.pipe(select(appState)).subscribe((val) => {
const data = new DataObject();
data.propA = val.propA;
data.propB = val.propB;
data.propC = val.propC;
});
return of(data);
}
您可以 return 一个新的可观察对象,如下所示:-
getDataModel():Observable<DataObject>()
{
let data = new DataObject();
return new Observable((observer) => {
this.store.pipe(select(appState)).subscribe((val)=>{
data.propA = val.propA;
data.propB = val.propB;
data.propC = val.propC;
observer.next(data);
observer.complete();
}));
});
}
您无需订阅 selector
即可实现,只需使用 map 运算符并重新调整 Observable
本身,如下所示:
getDataModel(): Observable<DataObject> {
return this.store.pipe(select(appState)).pipe(
map((val) => {
const data = new DataObject();
data.propA = val.propA;
data.propB = val.propB;
data.propC = val.propC;
return data;
})
);
}
我想 return 一个可观察对象(第 6 行)作为 DataObject。第 9 行正在监听商店更改,所以当商店发生更改时 - 第 10、11、12 行执行但不是在商店更改之前执行,对吗?或者它会获取存储中的现有值并执行该块(第 10、11、12 行)。 但是,如果存储还没有改变,第 14 行会等到第 10、11、12 行执行,还是 return 第 14 行作为空对象? 如果我想监听更改我该怎么办 -> 将数据从存储映射到 DataObject 并return它作为可观察的,而不是在那之前?
class DataObject {
propA: string = '';
propB: string = '';
propC: SecondDataObject;
}
getDataModel(): Observable<DataObject> {
let data = new DataObject();
this.store.pipe(select(appState)).subscribe((val) => {
const data = new DataObject();
data.propA = val.propA;
data.propB = val.propB;
data.propC = val.propC;
});
return of(data);
}
您可以 return 一个新的可观察对象,如下所示:-
getDataModel():Observable<DataObject>()
{
let data = new DataObject();
return new Observable((observer) => {
this.store.pipe(select(appState)).subscribe((val)=>{
data.propA = val.propA;
data.propB = val.propB;
data.propC = val.propC;
observer.next(data);
observer.complete();
}));
});
}
您无需订阅 selector
即可实现,只需使用 map 运算符并重新调整 Observable
本身,如下所示:
getDataModel(): Observable<DataObject> {
return this.store.pipe(select(appState)).pipe(
map((val) => {
const data = new DataObject();
data.propA = val.propA;
data.propB = val.propB;
data.propC = val.propC;
return data;
})
);
}