Skip to content

Firebase - Almacenamiento

Objetivo

Crear un formulario y guardarlo online con Firebase.

Supondremos que partimos de el código listo para la autentificación.

Vuefire

Vuefire nos facilita el trabajar con Firebase.

Instalación

Se instala mediante:

npm i --save vuefire

Configuración

En ./src/main.js:

Modificaciones de ./src/main.js
import Vue from 'vue'
import './plugins/vuetify'
import App from './App.vue'
import router from './router'
import store from './store'
import firebase from 'firebase'
import Vuefire from 'vuefire'

var firebaseApp = firebase.initializeApp({
  apiKey: "AIzaSyBZXlv0CUZBdPWvyzzi2eaBlXT764hoIDM",
  authDomain: "prueba-28ec5.firebaseapp.com",
  databaseURL: "https://prueba-28ec5.firebaseio.com",
  projectId: "prueba-28ec5"
})

var db = firebaseApp.database();

Vue.use(Vuefire)

/* eslint-disable */
Vue.config.productionTip = false

const unsubscribe = firebase.auth()
  .onAuthStateChanged((firebaseUser) => {
    new Vue({
      //el: '#app',
      router,
      store,
      firebase: {
         agenda: db.ref('agenda').orderByChild('created_at')
      },
      render: h => h(App),
      created () {
        if (firebaseUser) {
          store.dispatch('autoSignIn', firebaseUser)
        }
      }
    }).$mount('#app')
    unsubscribe()
})

Hemos creado una referencia a la base de datos.

También importamos vuefire. Vuefire exige que definamos el objeto firebase en la instancia de Vue.

Template

Lo primero es crear un borrador de la interfaz gráfica que queremos (algo sencillo: nombre y apellido):

AddContact.vue
<template>
  <v-container fluid>
    <v-layout row wrap>
      <v-flex xs12 class="text-xs-center" mt-5>
        <h1>Add Contact</h1>
      </v-flex>
      <v-flex xs12 sm6 offset-sm3 mt-3>
        <form @submit.prevent="sendContact">
          <v-layout column>
            <v-flex>
              <v-alert type="error" dismissible v-model="alert">
                {{ error }}
              </v-alert>
            </v-flex>
            <v-flex>
              <v-text-field
                name="name"
                label="Name"
                id="name"
                v-model="name"
                required></v-text-field>
            </v-flex>
            <v-flex>
              <v-text-field
                name="surname"
                label="Surname"
                id="surname"
                v-model="surname"
                required></v-text-field>
            </v-flex>
            <v-flex class="text-xs-center" mt-5>
              <v-btn color="primary" type="submit">Submit</v-btn>
            </v-flex>
          </v-layout>
        </form>
      </v-flex>
    </v-layout>
  </v-container>
</template>

<script>
export default {
  data: () => ({

    sendContact () {
      this.$root.$firebaseRefs.agenda.push(
        {
          // 'url': this.catUrl,
          'name': this.name,
          'surname': this.surname,
          'created_at': -1 * new Date().getTime()
        })
        .then(this.$router.push('/'))
    }

  })

}
</script>

Faltan detalles

Introducir la ruta para la página. Entrada en el menú.

Firestore

Firestore