Vue로 PWA 개발 - 그랜파 개발자.
애플리케이션에서 페이지 간의 이동(라우팅)을 관리하기 위해서는 라우터가 필요합니다. SPA(Single Page Application)에서는 전체 애플리케이션이 단일 HTML 페이지에서 작동하며, Vue Router를 사용하면 URL 경로에 따라 애플리케이션의 화면을 동적으로 전환할 수 있습니다.
그리고 라우팅을 통해 이동할 페이지 컴포넌트도 만들어야 합니다.
ChatGPT에게 물었습니다.
router 만들어 줘
ChatGPT
Vuetify와 함께 Vue Router를 사용하여 페이지 라우팅 기능을 구현하려면 다음 단계를 따르면 됩니다. 아래는 Vue Router를 설정하고, App Bar, Drawer, Footer를 포함한 UI와 함께 동작하는 예제입니다.
1. Vue Router 설치
먼저 Vue Router를 설치합니다:
npm install vue-router
2. 라우터 설정
//src/router/index.js
import { createRouter, createWebHistory } from 'vue-router';
// 페이지 컴포넌트
import Home from '@/views/Home.vue';
import About from '@/views/About.vue';
import Contact from '@/views/Contact.vue';
const routes = [
{
path: '/',
name: 'Home',
component: Home,
},
{
path: '/about',
name: 'About',
component: About,
},
{
path: '/contact',
name: 'Contact',
component: Contact,
},
];
const router = createRouter({
history: createWebHistory(),
routes,
});
export default router;
3. 메인 파일에 라우터 추가
//src/main.js
import { createApp } from 'vue';
import App from './App.vue';
import router from './router'; // 라우터 가져오기
import { createVuetify } from 'vuetify';
import 'vuetify/styles';
import '@mdi/font/css/materialdesignicons.css';
const vuetify = createVuetify();
createApp(App)
.use(router) // 라우터 사용
.use(vuetify)
.mount('#app');
4. 페이지 컴포넌트 생성
Home.vue
<!-- src/views/Home.vue -->
<template>
<v-container>
<h1>Home</h1>
<p>Welcome to the Home page!</p>
</v-container>
</template>
<script>
export default {
name: 'Home',
};
</script>
About.vue
<!-- src/views/About.vue -->
<template>
<v-container>
<h1>About</h1>
<p>Learn more about us on this page.</p>
</v-container>
</template>
<script>
export default {
name: 'About',
};
</script>
Contact.vue
<!-- src/views/Contact.vue -->
<template>
<v-container>
<h1>Contact</h1>
<p>Get in touch with us!</p>
</v-container>
</template>
<script>
export default {
name: 'Contact',
};
</script>
5. App.vue 수정
<!-- src/App.vue -->
<template>
<v-app>
<!-- App Bar -->
<v-app-bar color="primary" dark>
<v-app-bar-nav-icon @click="toggleDrawer" />
<v-toolbar-title>My App</v-toolbar-title>
</v-app-bar>
<!-- Navigation Drawer -->
<v-navigation-drawer v-model="drawer" app>
<v-list>
<v-list-item-group>
<v-list-item
v-for="(item, index) in menuItems"
:key="index"
@click="navigateTo(item.path)"
>
<v-list-item-icon>
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-item-group>
</v-list>
</v-navigation-drawer>
<!-- Main Content -->
<v-main>
<router-view /> <!-- 라우터가 여기에 컴포넌트를 렌더링 -->
</v-main>
<!-- Footer -->
<v-footer app color="secondary" dark>
<v-container>
<p>© {{ new Date().getFullYear() }} My App. All rights reserved.</p>
</v-container>
</v-footer>
</v-app>
</template>
<script>
export default {
data() {
return {
drawer: false,
menuItems: [
{ title: 'Home', icon: 'mdi-home', path: '/' },
{ title: 'About', icon: 'mdi-information', path: '/about' },
{ title: 'Contact', icon: 'mdi-phone', path: '/contact' },
],
};
},
methods: {
toggleDrawer() {
this.drawer = !this.drawer;
},
navigateTo(path) {
this.drawer = false; // 메뉴 클릭 시 Drawer 닫기
this.$router.push(path);
},
},
};
</script>
결과
- App Bar: 상단에 앱 이름과 햄버거 메뉴 표시.
- Drawer: 메뉴 클릭 시 다른 페이지로 이동.
- Main Content: router-view를 통해 Home, About, Contact 페이지 내용이 표시.
- Footer: 하단에 고정된 푸터.
메뉴 동작 테스트
- Home, About, Contact 메뉴를 클릭하면 페이지가 변경됩니다.
- 각 페이지에 설정한 내용을 확인할 수 있습니다.
추가로 원하는 기능이나 스타일을 요청하시면 더 자세히 도와드리겠습니다! 😊
Vue 프로젝트 Beta Test : mylog, 일상의 기록
'그랜파 개발자의 프론트엔드 공부-Vue' 카테고리의 다른 글
Vue로 PWA 개발, ChatGPT에게 프론트엔드 앱을 만들어 달라고 했습니다. (1) | 2024.12.01 |
---|---|
Vue로 PWA 개발, ChatGPT의 프론트엔드 앱 Router 예제를 실행해 봅시다. (0) | 2024.11.30 |
Vue로 PWA 개발, ChatGPT가 시키는 대로 프론트엔드 UI를 만들었습니다. (0) | 2024.11.28 |
Vue로 PWA 개발, ChatGPT에게 프론트엔드 앱을 위한 UI를 물었습니다. (0) | 2024.11.27 |
Vue로 PWA 개발, ChatGPT의 프론트엔드와 연동하여 사용할 Firestore의 예제를 실행해 봅시다. (0) | 2024.11.26 |