我正在使用角度4和RxJS 5,我有一个具有以下结构的对象(具有嵌套主题,在此示例中仅有2个级别):
objs = BehaviorSubject<MyObj[]>;
MyObj = {
prop1: BehaviorSubject<string> = "prop1";
prop2: BehaviorSubject<string> = "prop2";
prop1.subscribe(newValue => prop2 = prop1);
}
因此,如果我尝试输出objs的值,我会得到如下内容:
console.log(objs.value) =>
[
{
prop1: BehaviorSubject<string>;
prop2: BehaviorSubject<string>;
},
{
...
}]
所以结果不包括prop1和prop2的值,但我仍然在第二级有BehaviorSubject。
有没有办法获得嵌套的objs值,如下所示?:
objs = [{
prop1: "prop1";
prop2: "prop2"
}, {...}]
我想知道是否有某种淘汰赛ko.toJSON(http://knockoutjs.com/documentation/plugins-mapping.html)
您是否认为拥有嵌套的BehaviorSubjects或人们每天都这样做是不好的做法:)?
答案 0 :(得分:0)
不,没有内置的功能。你当然可以推出自己的方法。这可能是你可以开始的:
function isPrimitive(obj: any) {
return obj !== Object(obj);
}
function desubjectify(obj: any) {
if(isPrimitive(obj)) {
return obj;
}
if(obj instanceof BehaviorSubject) {
return desubjectify(obj.value);
}
let transformed: any = {};
for(let key of Object.keys(obj).filter(key => !key.startsWith('_'))) {
let value = obj[key];
if(value instanceof BehaviorSubject) {
transformed[key] = desubjectify(value.value);
} else {
transformed[key] = desubjectify(value);
}
}
return transformed;
}
嵌套行为主题对我来说似乎很可疑,但我不会立即排除,不知道更多细节。但是,我建议您在ngrx/store
上找到一个很好的教程并阅读它。任何时候人们开始大量使用行为主题,我会推荐这个。