【问题标题】:How to display data in the order of the time it is created with Firebase Web如何按使用 Firebase Web 创建的时间顺序显示数据
【发布时间】:2020-01-14 22:47:47
【问题描述】:

我知道这不是很困难,但我只是从 firebase 开始。我的问题是如何按照使用 Firebase 创建的时间顺序显示数据。目前我正在按名称订购。

这是我在数据库中写入然后显示的方式

// displaying and deleting data

function renderCafe(doc) {
  let li = document.createElement('li')
  let name = document.createElement('name')
  let phone = document.createElement('phone')
  let specialist = document.createElement('specialist')
  let data = document.createElement('data')
  let cross = document.createElement('div')
  
  
  li.setAttribute('data-id', doc.id)
  name.textContent = doc.data().name;
  phone.textContent = doc.data().phone;
  specialist.textContent = doc.data().specialist;
  data.textContent = doc.data().data;
  cross.textContent = 'x';
  
  
  li.appendChild(name);
  li.appendChild(phone);
  li.appendChild(specialist);
  li.appendChild(data);
  li.appendChild(cross);
  
  

  doctorList.appendChild(li);

  //deleting data

  cross.addEventListener('click', (e) => {
    e.stopPropagation();
    let id = e.target.parentElement.getAttribute('data-id');
    db.collection('patients').doc(id).delete();
  })
} 

  
  // real-time listener 
  const doctorList = document.querySelector('.patients');

  db.collection('patients').onSnapshot(snapshot => {
    let changes = snapshot.docChanges();
    changes.forEach(change => {
      if(change.type == 'added') {
        renderCafe(change.doc);
      } else if (change.type == 'removed') {
        let li = doctorList.querySelector('[data-id=' + change.doc.id +']');
        doctorList.removeChild(li);
      }
    })
  })

这就是我创建文档的方式

const createForm1 = document.querySelector('#patient');
createForm1.addEventListener('submit', (e) => {
  e.preventDefault();

  db.collection('patients').add({
    name: createForm1['name'].value,
    phone: createForm1['phone'].value,
    specialist: createForm1['specialist'].value,
    data: createForm1['date'].value
    
  }).then(() =>{

   //clear data
    document.getElementById('patient').reset();

    document.querySelector('.alert1').style.display='block';
        // Hide alert after 3 seconds
        setTimeout(function(){
        document.querySelector('.alert1').style.display='none';
        },3000);
  })
})

【问题讨论】:

标签: javascript firebase google-cloud-firestore


【解决方案1】:

您可以在patients 文档中添加Server Timestamp(例如,将其称为timestamp),然后使用它对文档进行排序。

工作原理:当您在某个文档属性中写入firebase.firestore.FieldValue.serverTimestamp() 时,它会被数据库中的服务器时间戳(一个数字)替换,因此您可以使用它进行排序。

编辑:在您添加的代码中,执行以下操作:

db.collection('patients').add({
  name: createForm1['name'].value,
  phone: createForm1['phone'].value,
  specialist: createForm1['specialist'].value,
  data: createForm1['date'].value,
  timestamp: firebase.firestore.FieldValue.serverTimestamp()
  // or timestamp: Date.now(), if you trust the client's clock
})

【讨论】:

  • 谢谢,我有点理解,但仍然不确定如何在我的代码中实现它
  • @Nick 向我们展示您写入数据库的代码,以便我们为您提供帮助
  • @Nick 这不是写入数据库的代码。它应该类似于 db.collection('patients').add(patientObject)db.collection('patients').doc(patientId).set(patientObject)
  • @Stratubus 到底是什么 // 实时监听器 const doctorList = document.querySelector('.patients'); db.collection('患者').onSnapshot(snapshot => {
  • @Nick 这是您读取数据库以更新 UI 的方式。应该有一些代码可以创建新文档,除非您通过 firebase 控制台手动创建它们,或者其他人的程序创建它们。
猜你喜欢
  • 2021-06-11
  • 2020-05-14
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 2017-07-20
  • 2016-09-05
  • 1970-01-01
  • 2021-10-06
相关资源
最近更新 更多