Библиотека Vuefire позволяет нам добавлять возможности управления базой данных Firebase прямо из нашего приложения Vue.
В этой статье мы рассмотрим, как использовать Vuefire и Vuexfire, чтобы добавить поддержку управления базой данных Cloud Firestore в наше приложение Vue.
Геоточки
Мы можем добавить широту и долготу местоположения с помощью конструктора GeoPoint.
Это поддерживается только CloudFirestore.
Например, мы можем написать:
<template>
<div>
<button @click="add">add city</button>
<div v-for="c of cities" :key="c.id">{{c}}</div>
</div>
</template>
<script>
import { db, GeoPoint } from "./db";
export default {
data() {
return {
cities: []
};
},
mounted() {
this.$bind("cities", db.collection("cities"));
},
methods: {
async add() {
await db.collection("cities").add({
name: "London",
location: new GeoPoint(51.3, 0)
});
}
}
};
</script>
db.js
import firebase from "firebase/app";
import "firebase/firestore";
export const db = firebase
.initializeApp({ projectId: "project-id" })
.firestore();
const { Timestamp, GeoPoint } = firebase.firestore;
export { Timestamp, GeoPoint };
Мы вызвали метод add с экземпляром GeoPoint, чтобы сохранить широту и долготу местоположения.
Тогда у нас должно получиться что-то вроде:
{ "name": "London", "location": { "latitude": 51.3, "longitude": 0 } }
сохранены.
Отметки времени
Кроме того, мы можем сохранять временные метки с помощью Vuefire.
Мы используем метод Timestamp.fromDate для создания нашей отметки времени.
Например, мы можем написать:
<template>
<div>
<button @click="add">add event</button>
<div v-for="e of events" :key="e.id">{{e}}</div>
</div>
</template>
<script>
import { db, Timestamp } from "./db";
export default {
data() {
return {
events: []
};
},
mounted() {
this.$bind("events", db.collection("events"));
},
methods: {
async add() {
await db.collection("events").add({
name: "event",
date: Timestamp.fromDate(new Date("2029-07-14"))
});
}
}
};
</script>
Мы передали экземпляр Date в Timestamp.fromDate.
Тогда получаем что-то вроде:
{ "name": "event", "date": { "seconds": 1878681600, "nanoseconds": 0 } }
сохранено в результате.
Vuefire
Мы можем использовать Vuefire для получения и установки данных из базы данных Firebase и сохранения состояния базы данных в нашем магазине Vuex.
Чтобы использовать его, мы устанавливаем необходимые пакеты, запустив:
yarn add vuex vuexfire vuefire firebase
or
npm i vuex vuexfire vuefire firebase
Теперь мы можем создать наше хранилище Vuex и привязать его к базе данных Firebase, написав:
main.js
import Vue from "vue";
import App from "./App.vue";
import { firestorePlugin } from "vuefire";
import { vuexfireMutations, firestoreAction } from "vuexfire";
import Vuex from "vuex";
import { db } from "./db";
Vue.use(Vuex);
Vue.use(firestorePlugin);
Vue.config.productionTip = false;
const store = new Vuex.Store({
state: {
books: []
},
mutations: {
...vuexfireMutations
},
actions: {
bindBooksRef: firestoreAction((context) => {
return context.bindFirestoreRef("books", db.collection("books"));
})
},
getters: {
books: (state) => {
return state.books;
}
}
});
new Vue({
store,
render: (h) => h(App)
}).$mount("#app");
App.vue
<template>
<div>{{books}}</div>
</template>
<script>
import { mapGetters, mapActions } from "vuex";
export default {
data() {
return {};
},
methods: {
...mapActions(["bindBooksRef"])
},
computed: {
...mapGetters(["books"])
},
mounted() {
this.bindBooksRef();
}
};
</script>
Как обычно, мы создаем наш магазин с конструктором Vuex.Store.
Но мы импортируем vuefireMutations и кладем в наш магазин.
Также наши действия создаются с помощью функции fireStoreAction.
И мы вызываем метод context.bindFirestoreRef, чтобы получить данные нашего магазина и установить их как состояние.
Первый аргумент - это имя состояния, а второй - это коллекция, которую мы хотим привязать к состоянию с заданным именем.
Также у нас есть геттер для получения состояния books.
В App.vue мы сопоставляем действия и геттеры с методами и вычисляемыми свойствами соответственно.
После этого мы можем вызвать действие this.bindBooksRef, которое мы сопоставили с методом заполнения состояния books.
Тогда наш шаблон должен показать books данные.
Заключение
Мы можем добавить данные о геолокации и отметках времени с помощью Vuefire.
Кроме того, библиотека Vuexfire позволяет нам легко привязать базу данных Firebase к нашему хранилищу Vuex.
Понравилась эта статья? Если да, то получите больше похожего контента, подписавшись на наш канал YouTube!