๐ ๋ชฉ์ฐจ
1ํธ์์ ๋ง๋ค Form input์ ์ ์ฅ์์ ์ฐ๊ฒฐํด์ผ ํ๋๋ฐ์,
์ด๋ฒ ๊ธ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์ฅ์๋ฅผ ๋ง๋ค์ด vue์ ์ฐ๊ฒฐํ๊ฒ ์ต๋๋ค.
์๋ฒ๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ธฐ๋ ๋ฒ๊ฑฐ๋ก์ฐ๋ Firebase๋ฅผ ํ์ฉํ๊ฒ ์ต๋๋ค.
1. Firebase ํ๋ก์ ํธ ์์ฑ
ํ๋ก์ ํธ ์ด๋ฆ์ ์ง์ ํ๊ณ google analytics๊ณ์ ์ ์ฐ๊ฒฐํด์ค๋๋ค.
ํ๋ก์ ํธ ์์ฑ์ด ์๋ฃ๋๋ฉด ์ฝ์๋ก ์ด๋ํ๋๋ฐ์,
์ฑ ์ถ๊ฐ > Web์ ์ ํํ๋ฉด, npm๋ฐฉ์์ผ๋ก web์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ๊ณผ apikey๋ฑ์ด ๋์ต๋๋ค.
์ด key๊ฐ๋ค์ ์ ๋ณต์ฌํด๋์ธ์. vue์ฝ๋ ์์ ์ฝ์ ํด์ฃผ์ด์ผ ํ๋ ๊ฐ์ ๋๋ค.
2. Firebase์ ๋ฐ์ดํฐ ์์ฑ
Firebase์ ๋ฐ์ดํฐ๋ฅผ vueํ๋ก์ ํธ์ ์ฐ๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋ ๋ง๋ค์ด์ฃผ์ธ์.
๊ทธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์๋ก์ด ์ปฌ๋์ ์ ํ๋ ๋ง๋ค์ด์ค๋๋ค.
'์ปฌ๋์ ์์'์ ๋๋ฅด๋ฉด ์ ์ปฌ๋ ์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ฆ์ cities๋ก ํ๊ณ seoul์ด๋ผ๋ ์์ดํ ์ ํ๋ ์ถ๊ฐํด์ฃผ์์ต๋๋ค.
3. Firebase์ ๋ฐ์ดํฐ ๊ถํ ๋ณ๊ฒฝ
๋ฐ์ดํฐ ์์ '๊ท์น' ํจ๋์ ๊ฐ์ ๊ถํ ๊ท์น์ ์์ ํด์ค๋๋ค.
ํ ์คํธ๋ฅผ ์ํด ์ ์ฒด ํ์ฉํด์ฃผ์์ต๋๋ค.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
4. Vue์ Firebase ์ฐ๊ฒฐ
์๋ ๋ช ๋ น์ผ๋ก firebase ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ vue์ ์ธ์คํจํ๊ณ
> npm install firebase
plugins/firebase.ts์์ Firebase ๊ด๋ จ ํจ์์ ์ค์ ์ ์ถ๊ฐํด์ค๋๋ค.
// plugins/firebase.ts
import Vue from 'vue'
import * as firebase from "firebase/app";
import 'firebase/firestore'
import { getFirestore, collection, addDoc, getDocs} from "firebase/firestore";
// Initialize Firebase
const firebaseConfig = {
..
};
firebase.initializeApp(firebaseConfig);
const db = getFirestore();
// report ์ปฌ๋์
์ฝ๊ธฐ
const readReportList = async() => {
const querySnapshot = await getDocs(collection(db, "report"));
return querySnapshot
}
// report ์ปฌ๋์
์ ์ฐ๊ธฐ
const addToReport = async(data) => {
await addDoc(collection(db, "report"), data);
}
export {addToReport, readReportList};
main.ts์์ plugins/firebase.ts๋ฅผ ์ํฌํธํด์ค๋๋ค
import Vue from 'vue'
import App from './App.vue'
import './registerServiceWorker'
import router from './router'
import store from './store'
import vuetify from './plugins/vuetify'
import './plugins/firebase'
Vue.config.productionTip = false
new Vue({
router,
store,
vuetify,
render: h => h(App)
}).$mount('#app')
5. Vue์์ Firebase๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
(1)์์ ๋ง๋ form ์ firebase db๋ฅผ ๋ถ์ฌ์ค๋๋ค.
<template>
<div>
<v-card
elevation="2"
style="width: 500px; margin: 20px auto; padding: 20px;"
>
<v-form
ref="form"
lazy-validation
>
<v-text-field
v-model="report.name"
:counter="10"
label="์ด๋ฆ"
required
></v-text-field>
<v-text-field
v-model="report.completed"
label="์๋ฃ"
type="number"
/>
<v-text-field
v-model="report.declined"
label="์์ทจ๊ฑฐ๋ถ"
type="number"
/>
<v-text-field
v-model="report.fresh"
label="ํ๋ ์๋ฐฑ"
type="number"
/>
<v-text-field
v-model="report.notScanned"
label="๋ฏธ์ค์บ"
type="number"
/>
<v-text-field
v-model="report.incomplete"
label="๋ฏธ๋ฐฐ์ก"
type="number"
/>
<v-text-field
v-model="report.canceled"
label="์ทจ์๊ฑด"
type="number"
/>
<v-text-field
v-model="report.retrieval"
label="ํ์"
type="number"
/>
</v-form>
<v-btn
elevation="2"
v-on:click= "submitReport">์ ์ถ</v-btn>
</v-card>
<li v-for="(report, idx) in reportedList" :key="idx">
{{ report }}
</li>
</div>
</template>
<script lang="ts">
import Vue from 'vue'
import {addToReport, readReportList} from '../plugins/firebase'
// import HelloWorld from '../components/HelloWorld.vue'
export default Vue.extend({
name: 'Home',
data() {
return {
report: {
name: '',
completed: 10,
declined: 0,
fresh: 0,
notScanned: 0,
incomplete: 0,
canceled: 0,
retrieval: 0
},
reportedList : [] as any
}
},
components: {
// HelloWorld,
},
methods: {
submitReport(){
addToReport(this.report)
console.log(this.report)
},
},
async created() {
const reportList = await readReportList();
const result = reportList.docs.map((doc) => doc.data());
console.log(result);
this.reportedList = result
}
})
</script>
ํผ ์ ๋ ฅ์ฐฝ์ ์ฑ์ฐ๊ณ submit์ ๋๋ฅด๋ฉด firebase์ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ๋๋ค.
'๊ฐ๋ฐ > WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vue ์์ํ๊ธฐ (4) | Github actions + S3๋ก ๋ฐฐํฌ ์๋ํ (0) | 2022.03.08 |
---|---|
Vue ์์ํ๊ธฐ (3)| ํ๋ก์ ํธ ๋น๋, S3๋ก ๋ฐฐํฌ (0) | 2022.03.07 |
Vue ์์ํ๊ธฐ (1) | vue create, vuetify, form input (0) | 2022.03.03 |