[Vue] ๋ผ์ฐํฐ(Router)
Vue js์ ํ์ด์ง ์ด๋์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : ํ์ด์ง ์ด๋ํ ๋ url ๋ณ๊ฒฝ๋๋ฉด, ๋ณ๊ฒฝ๋ ์์์ ์์ญ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐฑ์
- SPA์ ํน์ง (๋จ์ผ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ , Single Page Application)
: ๋ธ๋ผ์ฐ์ ์ ๋จ ํ๋ฒ, ํ์ด์ง ์ ์ฒด ๋ก๋. ์ดํ์๋ ํน์ ๋ถ๋ถ๋ง Ajax๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
- DOM์ ์๋ก ๊ฐฑ์ ํ๋ ๊ฒ์ ์๋๋ค.
router/index.js
๋ผ์ฐํฐ๋ฅผ ์ค์ ํ js ํ์ผ
- export default ์ฒ๋ฆฌํ์ฌ ๋ฐ์ผ๋ก ๋ด๋ณด๋ด๋ฉด์, router๋ก ์ ์ธํ๋ค.
- mode ์์ฑ์ ์ด์ฉํ์ฌ history ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด url์ #์ด ์ ๊ฑฐ ๋์ด์ง๋ค.
- path๋ ๋์ ๊ฒฝ๋ก, name์ ๋ผ์ฐํฐ์ ์ด๋ฆ์ ๋ถ์ฌ(์๋ ์์์๋ ์์). component๋ router-view ์์ญ์ ๋ณด์ฌ์ค ์ปดํฌ๋ํธ๋ฅผ ์ง์
import Vue from 'vue';
import VueRouter from 'vue-router';
import Help from '../views/help.vue';
Vue.use(VueRouter); //ํ์
export default new VueRouter({
mode:'history', //#์ ๊ฑฐ ์ํจ
routes: [{
path: '/',
redirect: '/home'
},
{
path: '/home',
component: () => import('../views/Main.vue'),
},
{
path: '/help',
component: Help
}]
});
App.vue
๋ผ์ฐํฐ๊ฐ ํ์๋ ์์ญ- router-view ๋ถ๋ถ์ jsํ์ผ์์ ์ง์ ํ component๊ฐ ํ์๋์ด์ง๋ค.- <router-link>๋ url์ ํตํด ํ์ด์ง ์ด๋์ ์ํจ. <a>ํ๊ทธ์ ๋น์ทํ๋ค.- ์ค์ ๋ฐ์ธ๋ฉ๋๋ ์์ญ์ <router-view>
<template>
<div id="app">
<!--router link๋ aํ๊ทธ๋ก ๋ณํ๋๋ฉฐ, url์ /main์ ์น๋ฉด ํด๋น ๊ฒฝ๋ก๋ก ํ์ด์ง ์ด๋-->
<router-link to="/main">main</router-link>
<router-link to="/help">help</router-link>
<!-- convert -->
<!-- <a href="#/main" class="">main</a> -->
<!--router-view๋ link๋ก ํ์ด์ง ์ด๋ ํ, ๊ทธ ๋ฒ์ ๋ด์์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ธ๋ฉ๋๋ ์์ญ-->
<router-view></router-view>
</div>
</template>
main.js
์์์ ๋ง๋ router๋ฅผ main.js์ ์ถ๊ฐ
- index.js๋ฅผ router๋ผ๋ ์ด๋ฆ์ผ๋ก import
- router๋ฅผ ์ถ๊ฐ. (6๋ฒ์งธ ๋ผ์ธ ์ฐธ๊ณ )
import Vue from 'vue';
import App from './App.vue';
import router from './router/index.js';
new Vue({
router,
render: h => h(App),
}).$mount('#app')