Получение документов с удостоверением личности из коллекции Firstore - PullRequest
1 голос
/ 29 апреля 2019

При использовании Firestore, vuefire, vue-tables-2 я застрял при получении идентификатора документа.

Моя структура данных следующая.enter image description here

Вот мой код.

  <v-client-table :columns="columns" :data="devices" :options="options" :theme="theme" id="dataTable">


 import { ClientTable, Event } from 'vue-tables-2'
  import { firebase, db } from '../../firebase-configured'

  export default {
    name: 'Devices',
    components: {
      ClientTable,
      Event
    },
    data: function() {
      return {
        devices: [],
        columns: ['model', 'id', 'scanTime', 'isStolen'],
        options: {
          headings: {
            model: 'Model',
            id: 'Serial No',
            scanTime: 'Scan Time',
            isStolen: 'Stolen YN'
          },
          templates: {
            id: function(h, row, index) {
                return index + ':' + row.id  // <<- row.id is undefined
            },
            isStolen: (h, row, index) => {
                return row.isStolen ? 'Y': ''
            }
          },
          pagination: {
            chunk: 5,
            edge: false,
            nav: 'scroll'
          }
        },
        useVuex: false,
        theme: 'bootstrap4',
        template: 'default'
      }
    },
    firestore: {
        devices: db.collection('devices')
    },
  };

Я ожидаю, что устройства должны id иметь свойство vuefire docs .

Но массив this.devices не имел поля id, даже если я проверял его наличие.

enter image description here enter image description here

1 Ответ

0 голосов
/ 29 апреля 2019

По сути, каждый документ уже имеет атрибут id, но он не перечисляется

Любой документ, связанный с Vuexfire, сохранит свой идентификатор в базе данных как неперечислимое свойство только для чтения.Это упрощает запись изменений и позволяет копировать данные только с использованием оператора распространения или Object.assign.

Вы можете получить прямой доступ к id, используя device.id.Но при переходе на vue-tables-2 、 устройства копируются и теряются id неперечисляемый атрибут.

Я думаю, что вы можете обойти, используя computed свойство

computed: {
  devicesWithId() {
    if (!this.devices) {
      return []
    }
    return this.devices.map(device => {
      ...device,
      id: device.id
    })
  }
}

Тогда, пожалуйста, попробуйтевместо этого используйте devicesWithId в vue-tables-2.

...