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ú.