我需要按降序从 Firebase 获取数据。
当组件第一次加载时,一切正常。
fetchData(){
return this.af.list('/path/path/',{
query: {
orderByChild: 'createdAt'
}
}).map(arr => {return arr.reverse();});
}
获取广告的数据存储在 var 中,然后显示。
但现在的问题是 var 在运行时被修改,用户可以更新 var 数组,或者删除或添加它。
每当发生这些操作时,Firebase 数据库上的数据就会被修改,并再次调用获取数据。
但随后又发生了相反的情况,使得整个东西使用更少。
我的意思是在第一个组件加载之后,var 是 1,2,3,4。 但是当我们添加到 var 而不是变成 1,2,3,4,5 时,它变成了 5,4,3,2,1。
这非常令人困惑,但我尝试了很多但无法解决这个问题。
更新
ngOnInit() {
this.display = this.route.snapshot.data['Auth'];
if(this.display){
this.showProgress = true;
this.user = JSON.parse(localStorage.getItem("user"));
this.service.fetchData().subscribe((data) => {
this.comments = data;
this.showProgress = false;
});
} else {
this.afAuth.authState.subscribe((data) => {
if (data) {
localStorage.setItem("user", JSON.stringify(data));
this.user = data;
this.service.fetchData().subscribe((res) => {
this.comments = res;
this.showProgress = false;
});
} else {
this.comments = null;
}
});
这就是运行时发生的情况,其余所有都是 angular2firebase 的 CRUD 函数,当我们添加更新或删除时发生
我尝试使用管道进行相同的操作,但在获取索引时会导致问题,因此我放弃了该计划,因为它变得太复杂了
add(){
this.service.postComment(this.comment, this.user);
}
editComment(key:string,updatedComment:any){
const index = ((this.page-1)*5)+i;
const updated = this.comments[index];
updated.comment = comment;
this.service.editComment(updated.$key,updated);
}
deleteComment(key:String){
this.service.deleteComment(this.comments[index].$key);
}
最佳答案
我相信您这里有一个拼写错误:
editComment(key:string,updatedComment:any){
this.service.editComment(updatedComment.$key, updatedComment); // I changed `updated` to `updatedComment`
}
您可以做的另一件事是遵循反向自定义管道方法,当您这样做时,删除 reverse()
来自您的map()
在fetchData()
.
反向管道:
import {Pipe} from 'angular2/core';
@Pipe({
name: 'reverse',
pure: false
})
export class ReversePipe {
transform (values) {
if (values) {
return values.reverse();
}
}
}
更新:
尝试将映射和反转的响应声明为 FirebaseListObservable<any[]>
.
fetchData(){
return this.af.list('/path/path/',{
query: {
orderByChild: 'createdAt'
}
}).map((array) => array.reverse()) as FirebaseListObservable<any[]>;
}
关于javascript - 按降序从 Firebase 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45185026/