javascript - 按降序从 Firebase 获取数据

标签 javascript angular firebase firebase-realtime-database

我需要按降序从 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/

相关文章:

javascript - 在我的 iframe 中,我想包含一个带有 Ext.ui.iframe 的特定 js 文件

angular - 找不到插件 "proposal-numeric-separator"。确保 ./available-plugins.js 中有一个条目

javascript - 从 Chart.js 选项回调调用 TypeScript 函数

android - Firebase 从数据库中求和项目

reactjs - 如何使用react-redux-firebase将 'auth'或 'profile'对象传递给firestoreConnect()?

firebase - 持久化用户身份验证 Flutter Firebase

javascript - 如何使用 for every 嵌套数组

javascript - 如何在 JavaScript 中将 console.log 内容作为字符串获取

javascript - YouTube API-PageToken

javascript - 使用多个 Bootstrap 模式时出现问题(ngx-bootstrap 和 Angular)