Vue에서 v-router를 사용하여 다른 페이지로 이동하고 데이터를 전달하는 방법을 설명한다.
이 예제에서는 국회도서관 자료검색 화면을 개발하며 적용된 내용을 기반으로 설명한다.
✅ Vue Router란?
Vue Router는 Vue.js에서 페이지 간 이동(라우팅)을 담당하는 공식 라이브러리이다.
단일 페이지 애플리케이션(SPA)에서 원활한 네비게이션을 제공하며, 동적 라우팅 기능을 지원한다.
✅ Vue Router 설치
Vue CLI 프로젝트에서 Vue Router를 설치하려면 아래 명령어를 실행한다.
npm install vue-router
이전에 Vue Router와 Vuetify를 함께 설치하는 방법을 다뤘으니, 필요하면 참고한다.
📌 이전 글 보기
vue router, vuetify 설치하기 #13
vue router ?페이지간 이동을 위해 필요한 vue router 설치.Vue.js의 공식 라우터로 Vue.js 코어와 긴밀히 통합되어 Vue.js로 단일 페이지 애플리케이션을 쉽게 구축할 수 있게 해 준다.☞ 공식 사이트https://
yuneenelife.tistory.com
✅ Vue CLI 프로젝트 구조
Vue Router를 적용하기 위해 기본적인 소스 구조를 정리한다.
📌 폴더 및 파일 구조
/src
├── assets/
│ ├── index.js → Vue Router 설정
│ ├── api.js → Axios API 통신 모듈
│ ├── style.css → CSS 스타일
├── pages/
│ ├── SearchMain.vue → 검색 메인 페이지
│ ├── ResultList.vue → 검색 결과 리스트 페이지
│ ├── ResultDtl.vue → 상세 도서 정보 페이지
├── App.vue
├── main.js
├── .env → API URL 환경변수 파일
☞ 개발화면 기획은 이전 글 참고
국회도서관 자료 검색 vue.js 화면 스케치 #14
국회도서관 도서검색은 5개의 흐름으로 진행한다.검색어 입력검색어로 국회도서관 도서검색 API 호출도서검색된 결과 리스트 노출특정 도서 클릭클릭된 도서의 상세정보 노출5개의 흐름을 3개
yuneenelife.tistory.com
✅ Vue Router 적용하기
📍 1. index.html 설정
Vue CLI에서 기본으로 제공하는 index.html을 그대로 사용한다.
<div id="app"></div>
이 div에 Vue 앱이 마운트된다.
📍 2. main.js 설정
main.js에서 Vue Router를 불러오고 적용한다.
import Vue from "vue";
import App from "./App.vue";
import vuetify from "./plugins/vuetify";
import router from "./assets/index"; // Vue Router 설정 파일 불러오기
import "./assets/style.css"; // CSS 파일 불러오기
Vue.config.productionTip = false;
new Vue({
vuetify,
render: (h) => h(App),
router, // Vue Router 추가
}).$mount("#app");
📍 3. App.vue 설정
기본 내용을 지우고, Router View를 적용한다.
<template>
<nav>
<router-view />
</nav>
</template>
📍 4. index.js - Vue Router 설정
라우팅 정보를 정의하는 index.js 파일을 생성한다.
import Vue from "vue";
import VueRouter from "vue-router";
import SearchMain from "../pages/SearchMain";
import ResultList from "../pages/ResultList";
import ResultDtl from "../pages/ResultDtl";
Vue.use(VueRouter);
const router = new VueRouter({
mode: "history", // Browser History 모드 사용
routes: [
{ path: "/", name: "searchMain", component: SearchMain },
{ path: "/resultList/", name: "resultList", component: ResultList, props: true },
{ path: "/resultDtl", name: "resultDtl", component: ResultDtl, props: true },
],
});
export default router;
- mode: "history" : URL에서 # 없이 깔끔한 주소 사용
- props: true : 라우트에서 전달된 데이터를 props로 자동 전달
📍 5. SearchMain.vue - 검색 페이지
Vue Router를 사용하여 검색 결과 페이지로 이동하고 데이터를 전달한다.
<template>
<div>
<br>
<h1><p v-bind:align="myAlign">국회 도서관 도서 검색</p></h1>
<br>
<p v-bind:align="myAlign">
<input v-model="srhInp" v-on:keyup.enter="goToResults" type="text">
<v-btn v-on:click="goToResults">검색</v-btn>
</p>
</div>
</template>
<script>
import router from '../assets/index';
export default {
data: function() {
return {
srhInp: "",
myAlign: "center",
};
},
methods: {
goToResults: function() {
if (this.srhInp.trim().length < 1) {
return alert("검색어를 입력해주세요.");
}
router.push({
name: "resultList",
params: { srhs: this.srhInp }, // 검색어를 파라미터로 전달
}).catch(() => {});
},
},
};
</script>
📌 설명
- router.push({ name: "resultList", params: { srhs: this.srhInp } })
- 검색어 입력 후 resultList.vue 페이지로 이동
- params를 이용하여 검색어 전달
✅ style.css - 기본 스타일 적용
Vue 프로젝트에서 스타일을 적용하기 위해 style.css를 추가한다.
html {
width: 80%;
margin-right: auto;
margin-left: auto;
font-family: sans-serif;
font-size: 16px;
line-height: 1.5;
}
input, button, textarea {
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button {
cursor: pointer;
padding: 6px 12px;
border-radius: 6px;
transition: background-color .2s;
}
button:hover {
background-color: darkgray;
}
input {
padding: 6px 12px;
border-radius: 6px;
border: 2px solid #ced4da;
}
✅ 마무리
여기까지 Vue Router를 이용해 페이지를 이동하고 데이터를 전달하는 방법을 알아보았다.
✅ 정리
✔ Vue Router를 설치하고 index.js에서 설정
✔ main.js에서 router를 추가
✔ router-view를 사용해 동적 페이지 변경
✔ router.push()로 페이지 이동 및 데이터 전달
🔜 다음 글 예고
resultList.vue에서 외부 API를 호출하는 방법과 Axios 모듈 설치 및 적용을 다룬다.
☞ v-router 공식사이트 참고
Quick Start — Vuetify.js
Get started with Vue and Vuetify in no time.
v15.vuetifyjs.com
☞ vue, vue cli 설치는 이전 글 참고
vue, vue cli 설치하고 버전 확인 #12
국회도서관 자료검색 서비스를 위한 프런트엔드 웹 환경 구성작업 환경작업폴더명public_data/pubd_web프로젝트 명pubdwebOSmacOS sonoma v 14.5☞ vue cli 의 가이드는 아래 URL에서 자세히 다루고 있다.https://c
yuneenelife.tistory.com
'국회도서관 자료검색 서비스' 카테고리의 다른 글
vuetify v-data-table 적용하기, vue modal 모달 화면 구성하기 #17 (0) | 2024.08.22 |
---|---|
vue axios 로 외부 API 호출 응답 받기, vue cli 환경변수 env 세팅 #16 (0) | 2024.08.21 |
국회도서관 자료 검색 vue.js 화면 스케치 #14 (0) | 2024.08.19 |
vue router, vuetify 설치하기 #13 (0) | 2024.08.14 |
vue, vue cli 설치하고 버전 확인 #12 (0) | 2024.08.13 |