๐Ÿ“• Language/Vue

[Vue] ๋ผ์šฐํ„ฐ(Router)

a n u e 2022. 5. 4. 16:17

 

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')