firestore + vuefire 사용법

develop, javascript, vue, firebase, vuefire
written byzuhern1zuhern

in

2019. 01. 30


vue + firebase (firestore)

설치

1. npm install

npm install vuefire firebase --save

2. firebase setting

import Vue from 'vue'
import VueFire from 'vuefire'
import firebase from 'firebase/app'
import 'firebase/firestore'

// vuefire 연동
Vue.use(VueFire)

// firebase 셋팅
var fbConfig = {
  apiKey: ...
};

let FBApp = firebase.initializeApp(fbConfig)
export const fbApp = FBApp

const database = firebase.firestore()
database.settings({ timestampsInSnapshots: true })
export const db = database

예시

1. firebase.js

import Vue from 'vue'
import VueFire from 'vuefire'
import firebase from 'firebase/app'
import 'firebase/firestore'

// vuefire 연동
Vue.use(VueFire)

// firebase 셋팅
var fbConfig = {...};

let FBApp = firebase.initializeApp(fbConfig)
export const fbApp = FBApp

const database = FBApp.firestore()
const initLangRowData = {}

export const db = {
  language: {
    getRows: function () {
      return database.collection('collectionName')
        .orderBy('category')
        .orderBy('createdAt')
    },
    addRow: function (data) {
      const createdAt = new Date();
      data = data || this.initLangRowData;
      data.createdAt = createdAt;

      // add: id 자동 부여 추가
      // set: id 지정 추가
      database.collection('collectionName').add(data);
    },
    deleteRowById: function (id) {
      var result = confirm('삭제하시겠습니까?');
      if (result) {
        database.collection('collectionName').doc(id).delete();
      }
    },
    updateRowById: function (id, data) {
      database.collection('collectionName').doc(id).update(data)
        .then((result) => {
          alert('저장되었습니다.');
        });
    }
  }
}

2. page.vue

<template>
  <table>
    <tr v-for="row in langList" :key="row.id">
      ...
    </tr>
  </table>
</template>

export default {
  name: "example",
  props: {},
  data() {
    return {
      langList: []
    }
  },
  methods:{
    addRow() {
      db.language.addRow(this.serviceId);
    },
    deleteRowById (id) {
      db.language.deleteRow(this.serviceId, id);
    },
    updateRowById (id, data) {
      db.language.updateRow(this.serviceId, id, data);
    },
    copyRow (data) {
      db.language.addRow(this.serviceId, data);
    }
  },
  firestore() {
    return {
      langList: db.language.getRows(this.serviceId)
    }
  }
}

참조 사이트

vuefire
display the data from Firebase
how to separate out collection get() for common use