IT&컴퓨터공학/Vue
[Vue.js] 5. 라우팅
yan_z
2021. 3. 5. 11:24
공식 라우터인 vue-router 를 사용해서 라우팅에 대해 알아보자
vue-router 설치
npm install vue-router
router 객체 생성
뷰 인스턴스 생성 객체에는 'router' 라는 속성이 있다.
Vue router 를 사용하기위해서는 이 속성을 통해 Vue router 객체를 넘겨줘야 한다.
main.js 안에 뷰 인스턴스를 생성하므로 이 안에 넣어주자
//main.js
import Vue from 'vue'
import App from './App.vue'
import router from "./router"
Vue.config.productionTip = false
new Vue({
render: h => h(App),
router,
}).$mount('#app')
이제 실제로 라우터 객체를 생성해보자.
위에서 import router from "./router" 를 통해 ./router 로부터 router 를 가져오므로 router/index.js 에 만들면 되겠다.
//router/index.js
import Vue from "vue"
import VueRouter from "vue-router"
// 뷰 어플리케이션에 라우터 플러그인을 추가한다.
Vue.use(VueRouter)
그리고 라우팅에 따라 렌더링할 컴포넌트 설정 객체도 정의한다.
이때 나는 각각의 view 를 views/ 에 별도로 만들어 관리하기로 했다.
<!--views/viewA.vue-->
<template>
<div>
<p>A view</p>
</div>
</template>
이런식으로 B,C 도 생성했다.
마지막으로 VueRouter 클래스 함수로 라우터 객체를 생성한다.
// router/index.js
import Vue from "vue"
import VueRouter from "vue-router"
import viewA from '../views/viewA.vue'
import viewB from '../views/viewB.vue'
import viewC from '../views/viewC.vue'
// 뷰 어플리케이션에 라우터 플러그인을 추가한다.
Vue.use(VueRouter)
const router = new VueRouter({
mode: "history",
routes: [
{ path: "/", component: viewA }, // '/' 경로로 들어오면 viewA 실행
{ path: "/b", component: viewB }, // '/b' 경로로 들어오면 viewB 실행
{ path: "/c", component: viewC },
],
})
export default router
- 5 - 7 줄 : import 를 통해 각각의 컴포넌트를 지역적으로 등록한다. 이게 가능한 이유는 모듈 시스템 ( 바벨, 웹펙 ) 을 사용해서 ES2015 문법을 동시에 사용하고 있기 때문이다.
- 13 - 20 줄
- mode : 기본값은 "해쉬뱅 모드"다. 브라우져 history 객체의 pushState() API를 사용하기 위해서는 "history"로 모드값을 설정한다.
- routes : 경로와 컴포넌트으로 이뤄진 컬렉션이다. 실제 이 맵을 보고 라우터가 경로에 따라 그에 맞는 컴포넌트를 렌더링한다. ex ) { path: "/", component: viewA } 의 뜻은 경로 '/' 로 가면 viewA라는 컴포넌트를 렌더링 해달라는 뜻이다.
라우터 뷰
이제 실제 출력될 부분을 설정해야한다. App.vue 가 루트 컴포넌트 이므로 여기에 라우터 뷰를 추가해보자.
//App.vue
<template>
<div id="app">
<h1>routing example</h1>
<!-- 라우트 아울렛 -->
<!-- 현재 라우트에 맞는 컴포넌트가 렌더링됩니다. -->
<router-view></router-view>
</div>
</template>
<script>
export default {
name : 'App',
}
</script>
그럼 밑처럼 /B 경로로 가면 view B 가 출력되는것을 볼 수 있다.
라우터 링크
App.vue ( 부모 컴포넌트 ) 에 네비게이션 링크를 걸고싶은 경우엔 <router-link> 를 사용하면 된다. 이때 경로는 'to' 라는 속성을 사용한다.
물론 우리가 아는 <a> 태그를 사용할 수도 있지만, <router-link> 를 사용하면 전체 화면을 갱신하지않고 바뀐 부분만 다시 렌더링 해주기 때문에 <router-link> 를 더 선호한다.
<template>
<div id="app">
<h1>routing example</h1>
<router-link to="/">A</router-link>
<router-link to="/b">B</router-link>
<router-link to="/c">C</router-link>
<!-- 라우트 아울렛 -->
<!-- 현재 라우트에 맞는 컴포넌트가 렌더링됩니다. -->
<router-view></router-view>
</div>
</template>
<script>
export default {
name : 'App',
}
</script>