角4 Firebase Observable与.map()apears刷新两次并且不会颠倒
问题描述:
我正在使用带有Firebase和AngularFire的Angular 4。我想显示在我的HTML代码中的第一个前10名用户,所以我的代码是角4 Firebase Observable与.map()apears刷新两次并且不会颠倒
export class HomefillerComponent implements OnInit {
topusers: Observable<any>;
constructor(db: AngularFireDatabase,public authService: AuthService) {
this.topusers = db.list('users', {
query: {
orderByChild: "totalscore",
limitToLast: 10,
}
}).map((topusers) => {console.log(topusers);
return topusers.reverse();})
}
我的火力数据库是:
"users" : {
"Test1" : {
"totalscore" : 50,
"username" : "test1"
},
"Test2" : {
"totalscore" : 30,
"username" : "test2"
},
"Test3" : {
"totalscore" : 20,
"username" : "test1"
},
"Test4" : {
"totalscore" : 10,
"username" : "test1"
},
"Zekes" : {
"totalscore" : 14,
"username" : "Zekes"
}
}
当我在我的角度4应用程序的一切工作导航fine.However当我重新搜索页面时,我得到两个console.log(a)
与反向对象和第二个与不反向对象。所以我的HTML显示未反转的对象。 你有什么想法吗?它只发生在我刷新页面时。 这是我刷新页面时得到的console.log(a)
。
答
一些测试后,我发现发生的事情:
的事情是.reverse()
功能不仅返回反阵,但反转阵列本身。而对topusers
的这种改变导致Observable再次触发.map()
,这将数组倒回原来的形式。
要解决此问题,只需将return语句更改为return topusers.slice().reverse();
即可。 .slice()
函数返回数组的新副本,这将防止此问题。
+0
这工作非常感谢..有时答案是如此简单,很难找到在同一时间.. :) – Zekelonas
我有同样的问题...我需要一些帮助,因为我不知道为什么会发生这种情况。 – wm1sr