Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缓存firebase数据以避免重复请求。Angular2与angularfire2_Angular_Firebase_Firebase Realtime Database_Angular2 Routing_Angularfire2 - Fatal编程技术网

缓存firebase数据以避免重复请求。Angular2与angularfire2

缓存firebase数据以避免重复请求。Angular2与angularfire2,angular,firebase,firebase-realtime-database,angular2-routing,angularfire2,Angular,Firebase,Firebase Realtime Database,Angular2 Routing,Angularfire2,我从firebase获得一个可观察的对象列表,然后在我的组件中订阅它(通过异步管道)。现在一切都很完美。只有当某些内容发生更改时,才会重新加载列表 //从firebase获取可观察列表 //物品服务 公共GetAllarticle(限制:数量=100):可观察 { 返回此.af.database.list(“/articles/”{ 查询:{ 限制第一:限制 } }).map((艺术)=>{ 返回arts.map(art=>{ return Article.unpack(艺术);//创建一个Ar

我从firebase获得一个可观察的对象列表,然后在我的组件中订阅它(通过异步管道)。现在一切都很完美。只有当某些内容发生更改时,才会重新加载列表

//从firebase获取可观察列表
//物品服务
公共GetAllarticle(限制:数量=100):可观察
{
返回此.af.database.list(“/articles/”{
查询:{
限制第一:限制
}
}).map((艺术)=>{
返回arts.map(art=>{
return Article.unpack(艺术);//创建一个Article对象
})
})
}
//ArticlesComponent
恩戈尼尼特(){
this.articles$=this.artService.getAllArticles();
}

然而,当我使用Angular2路由器并从路由中导航出来然后返回时,似乎所有相同的数据都再次从firebase加载,这会造成渲染延迟和流量开销

我猜这是因为当我导航出然后返回时,订阅被重新创建,数据被询问是否还没有加载


所以,我在想,怎样才能避免这种行为?可能是缓存,可能是其他东西。目前还不确定。

解决了它!这篇文章帮助很大:

//ArticleService
私有所有物品$:可见;
公共GetAllarticle(限制:数量=100):可观察
{
如果(!this.allArticles$)
{
this.allArticles$=this.af.database.list(“/articles/”{
查询:{
限制第一:限制
}
}).map((艺术)=>{
返回arts.map(art=>{
拆开包装=物品。拆开包装(艺术);
无包装退货;
})
}).publishReplay(1).refCount();
//对于所有新订阅,重播发出的值
}
返回此。allArticles$;
}