2017-04-24 113 views
0

我目前正在使用VueJS,Firebase和VueFire创建一个项目。我遇到的问题是订购最新到最旧的帖子列表。使用VueFire,我如何按日期按降序排列(从最新到最旧)?

我试过使用Firebase的内置查询,如list.orderByChild('date'),但没有运气。

我知道我需要使用Array.sort((a,b) => { return new Date(a.date) - new Date(b.date) }),但我正在艰难的工作时间让我与VueFire一起工作,甚至创建一个Vue过滤器。

让我知道如果我可以提供其他任何东西。

这是我的数据库是什么样子:

1

这里是我的代码:

2

回答

1

假设你获取的职位,并将它们存储在一个数组[]然后使用v-for并遍历数组并显示帖子。

您可以使用此解决方法:

  • 的,当你取从火力帖子默认情况下,你的职位从最旧到最新

  • 所以你可以用Array.unshift()方法将帖子添加到您的帖子数组颠倒了添加到您的数组的项目顺序

  • 由于项目在数组中以相反的顺序添加,因此您现在可以定期循环使用v-for个并显示oosts

0

最容易的选择(除了使用orderByChild('date'))可能会是一个computed property,在这里你将有这样的事情:

import firebase from './firebase' 

var vm = new Vue({ 
    el: '#example', 
    firebase // bring in your firebase module here 
    data: { 
    message: 'Hello' 
    }, 
    computed: { 
    // a computed getter 
    sortedList: function() { 
     // `this` points to the vm instance 
     return this.items.sort((a,b) => { return new Date(a.date) - new Date(b.date) }) 
    } 
    } 
}) 

这个属性会自动更新时,任何的它取决于变化的属性,从而保持它实时&反应:)

0

谢谢你们的回应!

我最终做的是向保存到数据库的列表项添加另一个值。

我添加的子order所以当我保存火力它的对象看起来是这样的:

var newItem = { 
    title: "Title to the post", 
    order: (this.itemListFromDatabase.length + 1) * -1 
} 
firebase.database().ref('itemList').push(newItem); 

我给它一个负值,因为当你调用orderByChild()它将按升序订购。似乎现在工作得很好。

当我取回我的名单看起来是这样的:

firebase: { 
    list: firebase.database().ref('list').orderByChild('order') 
} 
相关问题