-
[기초]#5 Vue의 Router 라우터란? (설치,설정,데이터 IN/OUT)Vue.js 2022. 6. 11. 20:46반응형
뷰 라우터는 뷰 라이브러리를 이용하여 싱글 페이지 애플리케이션을 구현할 때 사용하는 라이브러리이다.
페이지 이동하는 기능을 뷰 라우터로 구현할 수 있다.
이미지로 나타내면..
페이지간 이동을 시켜준다. 주요 기능
- Nested route/view mapping
- Modular, component-based router con
- Route params, query, wildcards
- View transition effects powered by Vue.js transition system
- Fine-grained navigation control
- Links with automatic active CSS classes
- HTML5 history mode or hash mode, with auto-fallback in IE9
- Customizable Scroll Behavior
1. 라우트 설치
vue-cli를 통해 프로젝트를 만들었기 때문에 기본적으로 Vue Router가 연결되어 있다.
Vue Router 는 프로젝트 생성시 기본 dependencies 로 추가 할수도 있고, npm or yarn 을 사용하여 필요에 따라 추가 할수 있다.
NPM
// {패키지 관리자명} install {플러그인명} --save npm install vue-router npm install vue-router --save-dev
—save, —save-dev 는 플러그인이 dependencies 항목에 저장 되는지 아니면 devDependencies 에 저장 되는지를 선택 하는것이다. devDependencies 는 개발모드에서만 활용 되는 플러그인을 저장 한다. —save 는 기본값 이기 때문에 생략 가능하다.
YARN
// {패키지 관리자명} add {플러그인명} yarn add vue-router yarn add --dev vue-router
—dev 는 devDependencies 에 저장 한다.
2.라우트 설정
component를 연결하는 route 설정 파일 만들기
src/main.js
import Vue from 'vue'; import App from './App.vue'; import router from './router'; //VueRouter를 불러온다. import store from './store'; Vue.config.productionTip = false; new Vue({ router, //Vue 인스턴스에 연결 store, render: (h) => h(App), }).$mount('#app');
src/router/router.js 생성
import Vue from 'vue'; import VueRouter from 'vue-router'; import Home from '../views/Home.vue'; //Vue와 VueRouter 연결 Vue.use(VueRouter); //VueRouter에 route를 등록하고 설정한다. const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes : [ { path: '/', name: 'Home', component: Home, }, { path: '/about', name: 'About', //네임값은 값을 보낼때 맵핑용으로 사용된다. component: () => import(/* webpackChunkName: "about" */ '../views/About.vue'), }, ] }); //설정한 VueRouter 내보낸다. export default router;
path : 사이트 url 경로
name: Component 이름(호출할 때 사용)
component : 해당 경로에 보이는 Component※ Home Component와 About Component 방식이 다른 이유는?
- 기본적으로 Vue.js는 싱글 페이지 애플리케이션이다.
- 사이트가 로딩될 때 우리가 생성한 컴포넌트들을 모두 불러온다. 그리고 모두 불러온 컴포넌트들은 사용자 요청에 맞게 하나씩 렌더링 한다.
※차이점
Home : 사이트를 최초 방문할 때 모든 컴포넌트를 가지고 오게 하는 방식
About : 사이트를 최초 방문과 상관없이 사이트 해당 경로에 접근했을 때 해당 컴포넌트를 가지고 오는 방식
src/App.vue
<template> <div id="app"> <div id="nav"> <!-- 해당 페이지로 이동 --> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> </div> <!-- 선택한 페이지 렌더링 --> <router-view/> </div> </template> <style lang="scss"> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } #nav { padding: 30px; a { font-weight: bold; color: #2c3e50; &.router-link-exact-active { color: #42b983; } } } </style>
tamplate 태그 안에서 라우팅 역할을 해주는 기술은 <router-link>이다. 우리가 선택한 페이지에 컴포넌트를 렌더링 해주는 부분은 <router-view/>이다.
Home과 About을 클릭할때 각각 다른 페이지를 호출한다. 3.데이터 넘기기
데이터를 전달하는 방법은 2가지이다.
1. Query
{name: 'Query', query: {name: '홍길동', age: 25 }}
2. Params
{name: 'Params', params: {name: '에디슨', age: 30 }}
name갑은 router.js 파일안에 작성한 name과 동일해야 한다.
src/router/router.js
import Vue from 'vue'; import VueRouter from 'vue-router'; import Main from '@/views/Main.vue'; import Query from '../views/Query.vue'; Vue.use(VueRouter); const routes = [ { path: '/', name: 'Main', component: Main }, { path: '/Query', name: 'Query', component: Query, }, { path: '/Params', name: 'Params', component: () => import(/* webpackChunkName: "about" */ '../views/Params.vue'), // true로 설정하면 데이터를 props로도 받습니다. props: true, }, ]; const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes, }); export default router;
Params로 데이터를 전달할 때 route 옵션에서 props: true로 설정하면 props로 값을 받을 수 있다.
<template> <div> Main <div> <router-link to="/">Main 페이지로</router-link> </div> <div> <br/> <div> <button @click="clickList">Query 프로그래밍 방식</button> </div> <br/> <div> <router-link:to="{ name: 'Query', query: { name: 'Query 선언적 방식', age: 1 } }"> Query 선언적 방식 </router-link> </div> <br/> <div> <button @click="clickParams">Params 프로그래밍 방식</button> </div> <br/> <div> <router-link:to="{ name: 'Params', params: { name: 'Params 선언적 방식', age: 1 }, }" > Params 선언적 방식 </router-link> </div> </div> <router-view /> </div> </template> <script> export default { name: "App", methods: { clickList() { this.$router.push({ name: "Query", query: { name: "Query 방식", age: 2 }, }); }, clickParams() { this.$router.push({ name: "Params", params: { name: "Params 방식", age: 2 }, }); }, }, }; </script>
4.데이터 받기
Main.vue
<template lang="ko"> <div> <h1>Main 페이지</h1> </div> </template> <script> export default { name: "Main", }; </script>
Query.vue
<template> <div> <h1>Query</h1> <h2>name: {{ $route.query.name }}</h2> <h2>age: {{ $route.query.age }}</h2> </div> </template> <script> export default { name: "Query", created() { console.log(this.$route.query.name); console.log(this.$route.query.age); }, }; </script>
Params.vue
<template> <div> <h1>Params</h1> <h2>params로 받은 데이터</h2> <h2>name: {{ $route.params.name }}</h2> <h2>age: {{ $route.params.age }}</h2> <h2>props로 받은 데이터</h2> <h2>name: {{ name }}</h2> <h2>age: {{ age }}</h2> </div> </template> <script> export default { name: "Params", props: { name: { type: String, default: "", }, age: { type: Number, default: 0, }, }, created() { console.log(this.$route.params.name); console.log(this.$route.params.age); }, }; </script>
5. 라우트 중첩과 리다이렉트
라우트 중첩 = 컴포넌트 중첩
컴포넌트 중첩을 활용하면 SAP(싱글페이지 어플리케이션 페이지)에 맞게 개발할 수 있다.
redirect 는 특정 URL로 접속했을 때 다른 URL로 보내는 기능
import Vue from 'vue'; import VueRouter from 'vue-router'; import Login from '@/views/Login.vue'; import LoginLayout from '@/layouts/LoginLayout.vue'; Vue.use(VueRouter); const routes = [ { path: '/', redirect: "/login", component: LoginLayout, children: [{ path: '/login', name: "Login", component: Login }], }, { path: '/main', name: 'Main', component: () => import('@/views/Main.vue'), children: [ { path: 'home', name: "Home", component: () => import('@/components/Home.vue') }, { path: 'setting/:id', name: "Setting", component: () => import('@/components/Setting.vue') } ], }, ]; const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes, }); export default router;
중첩하는 방법은 children을 활용하면 된다.
children 상위 영역은 "부모 컴포넌트" , children 영역은 자식 컴포넌트다.
그리고 redirect 코드가 있는데
path : '/' 루트 경로로 접근하면 redirect : '/login' 로그인 페이지로 이동한다.
출처
http://vrouter.uninote.com.cn/kr/installation.html
https://any-ting.tistory.com/47
반응형'Vue.js' 카테고리의 다른 글
[Vue] Vue js 비동기통기(axios) 샘플코드 (0) 2022.06.25 [기초]#6 Vue js 기초 문법 (0) 2022.06.11 [기초]#4 Vue의 컴포넌트란? (0) 2020.06.03 [기초]#2 Vue.js가 무엇인가? (0) 2020.06.03 [기초]#1 Vue.js 개발환경 설정하기 (CDN, Mac 환경(vsCode) (0) 2020.06.02