Angular 将4个角度2个观测值合并为1个
这是我的新应用 角度火力2+火力基础Angular 将4个角度2个观测值合并为1个,angular,firebase,firebase-realtime-database,angularfire2,Angular,Firebase,Firebase Realtime Database,Angularfire2,这是我的新应用 角度火力2+火力基础 getErros(开始,结束):FirebaseListObservable{ this.lista=this.db.list('/erros/geral',{ 查询:{ orderByChild:“titulo”, 限时一:10,, 答:开始, 结束 } }); this.lista2=this.db.list(“/erros/utilsst”{ 查询:{ orderByChild:“titulo”, 限时一:10,, 答:开始, 结束 } }); th
getErros(开始,结束):FirebaseListObservable{
this.lista=this.db.list('/erros/geral',{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
});
this.lista2=this.db.list(“/erros/utilsst”{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
});
this.lista3=this.db.list('/erros/utilfac'{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
});
this.lista4=this.db.list('/erros/geral',{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
});
this.listafinal=(this.lista&&this.lista2&&this.lista3&&this.lista4);
返回此.listafinal;
}
从firebase进行简单的数据搜索,但无法使其工作。有没有办法做到这一点
不能让它工作。仅从该列表接收数据。列表4我建议使用
CombineTest
。使用此运算符,您可以将所有四个组合为单个可观察对象,如果任何一个可观察对象发生更改,这将生成一个新值
Observable.combineLatest(
this.db.list('/erros/geral',{
query: {
orderByChild: 'titulo',
limitToFirst:10,
startAt: start,
endAt: end
}
}),
this.db.list('/erros/utilsst',{
query: {
orderByChild: 'titulo',
limitToFirst:10,
startAt: start,
endAt: end
}
}),
this.db.list('/erros/utilfac',{
query: {
orderByChild: 'titulo',
limitToFirst:10,
startAt: start,
endAt: end
}
}),
this.db.list('/erros/utilatas',{
query: {
orderByChild: 'titulo',
limitToFirst:10,
startAt: start,
endAt: end
}
})
)
.map(([geral, utilsst, utilfac, utilatas]: [any, any, any, any]) =>
({ geral, utilsst, utilfac, utilatas }) // Do add operation here.
)
我对代码做了一些修改
从'@angular/core'导入{Injectable};
从“angularfire2/database”导入{AngularFireDatabase,FirebaseListObservable};
从'rxjs/Rx'导入{Observable};
从“rxjs”导入*作为Rx;
@可注射()
出口级采购服务{
构造函数(专用数据库:AngularFireDatabase){
}
嘿
GetErrors(开始、结束):FirebaseListObservable{
this.hey=可观察的.combineLatest(
这个.db.list('/erros/geral'{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
}),
此.db.list(“/erros/utilsst”{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
}),
此.db.list(“/erros/utilfac”{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
}),
此.db.list(“/erros/utilatas”{
查询:{
orderByChild:“titulo”,
限时一:10,,
答:开始,
结束
}
})
)
.map([geral,utilsst,utilfac,utilatas]:[any,any,any,any])=>{let erro=[geral,utilsst,utilfac,utilatas];console.log(erro);return erro;})
把这个还给我;
}
}
this.listafinal=(this.lista&&this.lista2&&this.lista3&&this.lista4)从4个不同的路径获取数据。然后把它全部发送到一个地方,你想把四个可观察的组合成一个可观察的?如果你看看数据库,有四个不同的路径。我想经历这一切。所以是的,我想把4个观测值合并成一个,我想……你会遇到一个异步问题;如果在/geral中返回10000个节点,在/utilfac中返回3个节点,那么从/geral获得结果的时间将更长。因此,在返回所有数据之前“组合”节点将是一个问题。您需要允许Firebase在使用数据之前返回数据。我应该返回什么?将返回语句添加到Observablereturn Observable.CombineTest(
this.hey=Observable.CombineTest(|),然后返回此。Heyther有一个错误。错误:找不到不同的支持对象“[object object]'的类型为'object'。NgFor仅支持绑定到诸如数组之类的Iterables。请执行控制台日志并向我显示输出。我认为在映射中您需要更新这里的问题您需要创建错误数组,但结果是数组错误数组。我看了我的新帖子,好的。您是否尝试过此映射([geral,utilsst,utilfac,utilatas]:[any[],any[],any[],any[],any[],any[]])=>{let result=[…geral,…utilsst,…utilfac,…utilatas];console.log('result',result)return result;})是的,我什么都试过了。顺便说一句,我必须使用flatMap,因为ngFor无法读取简单的mapI。我尝试过这个解决方案,但它什么都没做。你升级过代码吗?