๋ทฐ ๋ผ์ฐํฐ๋ Vue.js๋ฅผ ์ด์ฉํ์ฌ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA)์ ๊ตฌํํ ๋ ์ฌ์ฉํ๋ Vue.js์ ๊ณต์ ๋ผ์ฐํฐ๋ค. Vue Router ๊ณต์๋ฌธ์
๋ผ์ฐํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋คํธ์ํฌ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์ฅ์น๋ฅผ ๋งํ๋ค. ๋ทฐ์์ ๋งํ๋ ๋ผ์ฐํฐ๋ ์ฝ๊ฒ ๋งํด์ URL์ ๋ฐ๋ผ ์ด๋ค ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค์ง ๋งคํํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด "
/home
๊ฒฝ๋ก๋ก ์์ฒญ์ด ์์ ๋Home.vue
์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ๋ ๋๋ง ํด๋ผ" ๋ผ๋ ์ญํ ์ ์ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋/home
->Home.vue
์ด๋ฌํ ๋งคํ์ ๋ณด๋ฅผ ๋ผ์ฐํธ(Route)๋ผ๊ณ ๋ ํ๋ค.
npm install vue-router
HomeView.vue
์AboutView.vue
ํ์ด์ง(์ปดํฌ๋ํธ)๋ฅผ ์์ฑํ๋ค. ๊ฒฝ๋ก๋ root์ ํด๋๋ฅผ ๋ง๋ค์ด ๋ฃ์ด์ค๋คsrc/views/
HomeView.vue
src/views/HomeView.vue
<template>
<div>Home view</div>
</template>
<script setup>
</script>
<style lang="scss" scoped></style>
AboutView.vue
src/views/AboutView.vue
<template>
<div>About View</div>
</template>
<script setup>
</script>
<style lang="scss" scoped></style>
index.js
// src/router/index.js
//๋ผ์ฐํธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๋ผ์ฐํฐ ๊ฐ์ฒด๋ฅผ ์์ฑ
import { createRouter, createWebHistory } from 'vue-router';
import HomeView from '@/views/HomeView.vue';
import AboutView from '@/views/AboutView.vue';
//router์ค์
const routes = [
{
path: '/', //root๋ก ๋ค์ด์์ ๋
name: 'Home',
component: HomeView,
},
{
path: '/about', //about๋ก ๋ค์ด์์ ๋
name: 'About',
component: AboutView,
},
];
//๋ผ์ฐํฐ ๊ฐ์ฒด ์์ฑ
const router = createRouter({
history: createWebHistory('/'),
routes, // ํค์ ๊ฐ์ด ๊ฐ์ผ๋ฉด ๊ฐ์ ๋นผ๊ณ ์ ์ด๋ ๋จ
});
//์์ ๋ router ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์๋๋ก export
export default router;
์ค์ ํ ๋ผ์ฐํฐ ๊ฐ์ฒด๋ฅผ Vue ์ธ์คํด์ค์ ์ถ๊ฐํด๋ณด์
main.js
// src/main.js
//bootstrap ์ค์น ํ import
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap-icons/font/bootstrap-icons.css';
import { createApp } from 'vue';
import App from './App.vue';
//router/index.js์์ ์ค์ ํ router ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ด
import router from '@/router';
//use ๋ฉ์๋๋ฅผ ํตํด์ ์ค์ ํ๋ค.
createApp(App).use(router).mount('#app');
import 'bootstrap/dist/js/bootstrap.js';
app.use(router)
๋ฅผ ํธ์ถ ํจ์ผ๋ก์จ ์ปดํฌ๋ํธ ๋ด๋ถ์์ $router
, $route
๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค.
Vue Router ์์๋ ํ์ด์ง๋ฅผ ์ด๋ํ ๋๋ ์ผ๋ฐ
a
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ปค์คํ ์ปดํฌ๋ํธ์ธ<RouterLink>
๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์ด์ง ๋งํฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์ด๋ฅผ ํตํด Vue Router๋ ํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ฉ ํ์ง ์๊ณ URL์ ๋งคํ๋ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ ์ ์๋ค.
<RouterView>
๋ URL์ ๋งคํ๋ ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ํ์ํ๋ค.
router.push
์ ๊ฐ์ ์ญํ ์ ํ์ง๋ง ์ ์ผํ ์ฐจ์ด๋ ์๋ก์ด ํ์คํ ๋ฆฌ ํญ๋ชฉ์ ์ถ๊ฐํ์ง ์๊ณ ํ์ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ํ์ฌ ํญ๋ชฉ์ ๋์ฒดํ๋ค.
// router.push ๋ฉ์๋์ replace: true ์์ฑ์ ์ถ๊ฐํ์ฌ ๋์ผํ๊ฒ ๋์ ์ํฌ ์ ์๋ค.
router.push({ path: '/home', replace: true})
// equivalent to
router.replace({ path: '/home'})