<router-link to="URL ๊ฐ">
<a>
ํ๊ทธ๋ก ํ์๋์ด ํด๋ฆญ ์ URL ๊ฐ์ผ๋ก ์ด๋<div>
<router-link to="/login">Login</router-link>
</div>
<router-view>
<div>
<router-view></router-view>
</div>
// Router ์ธ์คํด์ค ์์ฑ
var router = new VueRouter({
mode: "history", // ๊ธฐ๋ณธ ๊ฐ์ Hash๋ชจ๋(history ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ ์คํ์ ๊ธฐ๋ก)
routes: [ // ํ์ด์ง์ ๋ผ์ฐํ
์ ๋ณด
{
path: "/login", // ํ์ด์ง URL
component: LoginComponent, // ํ์๋ ์ปดํฌ๋ํธ
components: {}, // ์ปดํฌ๋ํธ ์ฌ๋ฌ๊ฐ(Named View) ์ผ ๊ฒฝ์ฐ
children: [ ... ], // ํ์ ๋ผ์ฐํ
์ ๋ณด
redirect: ..., // redirect ์ฒ๋ฆฌ(url๊ณผ ํ๋ฉด ๋ชจ๋ redirect ์ค์ ์ผ๋ก ํ์)
alias: ... // url์ alias๋ก ํ์๋์ง๋ง ํ๋ฉด์ component์ ํ๋ฉด ํ์
}
...
]
});
const router = createRouter({
history : createWebHistory(),
routes : [ ... ]
});
<body>
<div id="app">
<div>
<!-- Router ๋งํฌ -->
<router-link to="/login">Login</router-link>
<router-link to="/main">Main</router-link>
</div>
<!-- URL์ ๋ฐ๋ฅธ ํด๋น ์ปดํฌ๋ํธ๊ฐ ํ์๋๋ ์์ญ-->
<router-view></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.5.3/dist/vue-router.js"></script>
<script>
var LoginComponent = {
template: "<div>login</div>",
};
var MainComponent = {
template: "<div>main</div>",
};
// Router ์ธ์คํด์ค ์์ฑ
var router = new VueRouter({
routes: [
{
path: "/login", // ํ์ด์ง URL
component: LoginComponent, // ํ์๋ ์ปดํฌ๋ํธ
},
{
path: "/main", // ํ์ด์ง URL
component: MainComponent, // ํ์๋ ์ปดํฌ๋ํธ
},
],
});
new Vue({
el: "#app",
router: router, // ๋ผ์ฐํฐ ๋ฑ๋ก
});
</script>
</body>
Login, Main ์ปดํฌ๋ํธ๋ฅผ ์์ฑ ํ ๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ ๋ ๋ง๋ค ํ๋จ์ ํด๋น ์ปดํฌ๋ํธ ๋ด์ฉ ํ๋ฉด ํ์
npm install vue-router --save
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const router = new VueRouter({
mode: 'history',
routes: [
{
path: "/login", // ํ์ด์ง URL
component: LoginComponent, // ํ์๋ ์ปดํฌ๋ํธ
},
{
path: "/main", // ํ์ด์ง URL
component: MainComponent, // ํ์๋ ์ปดํฌ๋ํธ
},
],
})
export default router
vue add router
์ ๋ช ๋ น์ด ํ๋๋ฉด ์ ๋ ฅํ๋ฉด vue router ์ค์น ๋ฐ ๊ธฐ๋ณธ ์ค์ ์ ํ๋ฒ์ ์งํ ํ ์ ์๋ค. ์งํ๋๋ ์์ ๋ค์ ์๋์ ๊ฐ๋ค
์ค์น ํ package.jsonํ์ผ์ ๋ณด๋ฉด dependencies์ vue-router, devDependencies์ @vue/cli-plugin-router๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
ํ๋ก์ ํธ ๋ฃจํธ์ router/index.js ํ์ผ์๋ ๊ธฐ๋ณธ router ์ค์ ์ด ๋์ด์๊ณ , ์ํ์ ์ํ views/AboutView.vue, HomeView.vue ํ์ผ์ด ์์ฑ๋์ด ์๋ค.
App.vueํ์ผ์ template์ router-link, router-view ํ๊ทธ๊ฐ ์ ์ฉ๋์ด ์๋ค.
main.jsํ์ผ์์๋ router์ค์ ์ importํ์ฌ ์ ์ฉ๋์ด ์๋ค.
์ดํ๋ฆฌ์ผ์ด์
์ npm run serve๋ก ์คํํด์ ์ ์ํด๋ณด๋ฉด router ์ ์ฉ ๋์์ ํ์ผ ํ ์ ์๋ค.
ํ์ด์ง์์ ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋์์ ํ์ํ๋ ๋ผ์ฐํ ๋ฐฉ์
<div>
<router-view name="header"></router-view>
<router-view></router-view> <!-- name์ด ์๋ ๊ฒฝ์ฐ ๋ํดํธ -->
<router-view name="footer"></router-view>
</div>
<div id="app">
<!-- URL์ ๋ฐ๋ฅธ ํด๋น ์ปดํฌ๋ํธ๊ฐ ํ์๋๋ ์์ญ-->
<router-view name="header"></router-view>
<router-view></router-view>
<router-view name="footer"></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.5.3/dist/vue-router.js"></script>
<script>
var BodyComponent = {
template: "<div>Body</div>",
};
var HeaderComponent = {
template: "<div>Header</div>",
};
var FooterComponent = {
template: "<div>Footer</div>",
};
// Router ์ธ์คํด์ค ์์ฑ
var router = new VueRouter({
routes: [
{
path: "/", // ํ์ด์ง URL
components: {
default: BodyComponent,
header: HeaderComponent,
footer: FooterComponent,
},
},
],
});
new Vue({
router,
}).$mount("#app"); // $mount()๋ก 'el'์์ฑ๊ณผ ๋์ผํ ๊ธฐ๋ฅ
</script>
<router-view name="...">
์ name ์์ฑ์ ์ฌ์ฉํ์ฌ ํด๋นํ๋ Router์ธ์คํด์ค์ 'components' ์์ฑ์ key์ ํด๋นํ๋ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ํ์๋๋ค
์ถ์ฒ : https://happy-jjang-a.tistory.com/119 - jjang-a ๋ธ๋ก๊ทธ