Vue Router
์ฑ๊ธํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
๊ตฌํํ ๋ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ค.
ํ์ด์ง๊ฐ์ ์ด๋ํ๋ ๊ธฐ๋ฅ ๊ตฌํํ ๋ ์ฌ์ฉํ๋ค.
๋ผ์ฐํฐ ์ธ์คํด์ค ์์ฑ
var router = new VueRouter({ ... })
- ๋ผ์ฐํฐ ์ต์
์ถ๊ฐ ๊ฐ๋ฅ
- routes : ๋ผ์ฐํ
ํ URL ๊ณผ ์ปดํฌ๋ํธ ๊ฐ ์ง์
- path : ํ์ด์ง url
- component : ํด๋น ํ์ด์ง๊ฐ ๋ฟ๋ ค์ง ์ปดํฌ๋ํธ
- mode URL ์ ํด์ฌ ๊ฐ ์ ๊ฑฐ ์์ฑ
- mode=''history' ===> # ๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ถ๋ ๊ฒ์ ์ ๊ฑฐ
- ์ธ์คํด์ค์ ๋ผ์ฐํฐ ์ธ์คํด์ค ๋ฑ๋ก
new Vue({ router: router ...})
- routes : ๋ผ์ฐํ
ํ URL ๊ณผ ์ปดํฌ๋ํธ ๊ฐ ์ง์
์ค์น
https://router.vuejs.org/installation.html
๊ณต์์ฌ์ดํธ ์ค์น ๋งํฌ
npm install vue-router
npm : node pakcage manager
const router = new VueRouter({ // ๋ผ์ฐํฐ ๊ฐ์ฒด ์์ฑ
mode: 'history',
routes: [ // ํ์ด์ง์ ๋ผ์ฐํ
์ ๋ณด
{
path: '/login', // ํ์ด์ง url
component: () => // ํด๋น url ์์ ํ์๋ ์ปดํฌ๋ํธ
import ('@/views/LoginPage.vue'),
}, ...
์ฝ๋ ์คํ๋ฆฌํ
import ('@/views/LoginPage.vue')
๊ธฐ์กด์ฒ๋ผ import ๋ฅผ ํตํด ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฒ์์ ๋ก๋ฉํ๋ ๊ฒ์ด ์๋๋ผ
ํด๋น url ๋ก ์ด๋ํ์๋๋ง ๋ค๊ณ ์ค๋๋ก ํ๋ ๊ฒ์ด๋ค.
ํ์ด์ง url์ด ๋ณ๊ฒฝ๋ฌ์๋ ๊ทธ์๋ฐ๋ผ ๋ฟ๋ ค์ง๋ ์์ญ
router-link
๋ ์ค์ ํ๋ฉด์์๋ ํ๊ทธ๋ก ๋ณํ๋์ ๋์จ๋ค.
<div id="app">
<h1>Hello App!</h1>
<p>
<!-- ๋ค๋น๊ฒ์ด์
์ ์ํด router-link ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. -->
<!-- ๊ตฌ์ฒด์ ์ธ ์์ฑ์ `to` prop์ ์ด์ฉํฉ๋๋ค. -->
<!-- ๊ธฐ๋ณธ์ ์ผ๋ก `<router-link>`๋ `<a>` ํ๊ทธ๋ก ๋ ๋๋ง๋ฉ๋๋ค.-->
<router-link to="/login">Go to Login</router-link>
<router-link to="/main">Go to Main</router-link>
</p>
<!-- ๋ผ์ฐํธ ์์ธ๋ -->
<!-- ํ์ฌ ๋ผ์ฐํธ์ ๋ง๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ฉ๋๋ค. -->
<router-view></router-view>
</div>
์๋ ํ์ด์ง ์ ๊ทผ ๋ผ์ฐํฐ ์ฒ๋ฆฌ
path : '*',
compoment: () => import ( ... NotFoundPage.vue)
Axios
- ajax ํต์ ๊ณผ ๊ฐ์ด ๋น๋๊ธฐ ํต์ ๊ธฐ๋ฒ์ด๋ค.
- vue resource ๋ผ์ด๋ธ๋ฌ๋ฆฌ => 2๋ ์ ์ ์์ด์ง
- Vue ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ HTTPํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ค.
npm install axios
๋ฅผ ํตํด ์ค์นํ๊ฑฐ๋<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
CDN ์ ๋ ฅ์ ํตํด ์ค์น ํ๋ค.
axios ๋ชจ๋์์ request/response ๋ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์์๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด request๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ๋์ response ๋ ์๋ต์ ๋ฐ๊ธฐ ์ ์ ๋ค์ ๊ตฌ๋ฌธ์ ์ํํด๋ฒ๋ ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค์ง ๋ชปํ๋ค.
testFunction() {
const response = axios.get('api/test')
console.log(response)
}
๊ฒฐ๊ณผ
Promise {<pending>} __proto__: Promise [[PromiseStatus]]: "resolved" [[PromiseValue]]: Object
javascript ๋ axios() ๋ฅผ ์ฌ์ฉํด์ request๋ฅผ ๋ณด๋ด๋ ์ฐ์ฐ์ ์ํํ๊ณ response๋ฅผ ์ธ์ ๋ฐ๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ , ๋ค์ ๋ฌธ์ฅ์ ์ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ์ํด Promise ๋ฅผ ์ฌ์ฉํ๋ค.
Promise
๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ => ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค.
testFunction() {
axios.get('api/test')
.then(function(response) {
console.log(response)
})
}
.then()
๋ง ๋ถ์ด๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ๋ถ๋ฌ์จ๋ค.
๋จ ! .then()
๊ตฌ๋ฌธ ๋ด์์๋ง ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
์๋ฅผ ๋ค์ด
testFunction() {
axios.get('api/test')
.then(function(response) {
console.log(response)
})
console.log('Test')
}
console.log('Test')
async await
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฐฉ์์ธ ์ฝ๋ฐฑํจ์์ ํ๋ก๋ฏธ์ค์ ๋จ์ ์ ๋ณด์ํ๋ค.async function ํจ์๋ช
() { await ๋น๋๊ธฐ_์ฒ๋ฆฌ_๋ฉ์๋_๋ช
() ; }
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฉ์๋๋ ํ๋ก๋ฏธ์ค๊ฐ์ฒด
๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค.
acync ๋ ์ด๋ค ๊ฐ์ return ํ๋๊ฐ์ Promise ๊ฐ ๋ฆฌํด๋๋ค.
Vue CLI
npm install -g @vue/cli
๋ก ์ค์นํ ์ ์๋ค.
๊ถํ์ด ์๋ค๋ฉด sudo ์์ ๋ถ์ด๋ฉด ๋๋ค.
main.js
import App from './App.vue'
new Vue({ el : '#app', render : h => h(App), // ==> ํ
ํ๋ฆฟ์์ฑ ์ ์๋ฌ์๋ render ํจ์๊ฐ ์คํ๋๋ค. })
App ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์์ Vue ์ ์ง์ด๋ฃ๊ณ ๋๋๋ง ํ๋ค.
์ฑ๊ธํ์ผ ์ปดํฌ๋ํธ
<template></template>
<script></script>
<style></style>
์ธ ์์ฑ์ ํํ์ผ์ ๊ด๋ฆฌํ๊ฒ ๋ค๋ ๊ฒ์ด ์ฑ๊ธํ์ผ ์ปดํฌ๋ํธ์ด๋ค.
์ฑ๊ธํ์ผ ์ปดํฌ๋ํธ์์ props ์์ฑ ์ฌ์ฉ
์ฑ๊ธํ์ผ ์ปดํฌ๋ํธ์์ event emit ์ฌ์ฉ
Store
state ์ฌ๋ฌ ์ปดํฌ๋ํธ ๊ฐ์ ๊ณต์ ๋๋ ๋ฐ์ดํฐ
mutations state๊ฐ(๋ฐ์ดํฐ) ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ์ ์ผํ ๋ฉ์๋
* commit() ์ผ๋ก ๋์์ํจ๋ค.
์ฐธ์กฐ
'Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] Chart.js ๋์ ๋ง๋ ๊ทธ๋ํ ์ดํฉ ํ์ํ๊ธฐ (Stack Bar, Total) (1) | 2022.10.25 |
---|---|
[Vue.js] Hot Reload ๋์ ์ํ ๋ (0) | 2022.10.18 |
Vue.js(3) Vue ์ธ์คํด์ค ์์ฑ ๋ฐ ์ปดํฌ๋ํธ (0) | 2022.10.09 |
Vue.js(2) vue ์ธ์คํด์ค ๋ฐ ํ ํ๋ฆฟ ๋ฌธ๋ฒ (0) | 2022.10.09 |
Vue.js(1) ํ๋ก์ ํธ ์์ฑ ๋ฐ ํ๋ก์ ํธ ๊ตฌ์ฑ (0) | 2022.10.09 |
๋๊ธ