일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 남자육아휴직
- MTB
- 샤오미
- 저출산
- 싸이클
- 인공지능
- 대한민국선거
- 도로패임
- 청주시 일반계 고등학교
- 육아휴직급여
- 청주시 지하철
- 엔진오일
- 오프로드
- 코란도스포츠
- 콜로라도
- 감나무전지
- 2024년 합계출산율
- 가칭 동남고등학교
- 아빠육아
- 중고노트북
- 전동전기톱
- 픽업트럭
- 파리브레스트파리
- 미지아
- 준연동형비례대표
- 국민을 위한 국민연금은 없다
- 40대아빠육아
- 액티언스포츠
- 자전거
- 데이터시각화
Archives
- Today
- Total
열심히 일한 당신 떠나라
코딩 자율학습단(Vue.js 프런트엔드 개발 입문) 13일차 본문
[Vue 13일차]
~8.3 뷰 라우터의 고급 기능 다루기
(종이책 p.374-390)
내비게이션 가드
라우팅 과정 중 특정 지점에서 라우트 전환을 가로채 사용자 정의 로직을 실행할 수 있게 해주는 훅
내비게이션 가드를 사용하며 라우트 접근을 제어하거나 조건에 따른 다른 라우트로 리다이렉션하거나 라우트 변경 전에 데이터를 불러오는 작업 등을 수행할 수 있다.
사용방식에 따라 전역 가드, 라우트별 가드, 컴포넌트 내 가드로 구분할 수 있다.
경로 메타 필드
meta 속성을 사용해 해당 라우트에 대한 추가적인 사용자 정의 정보를 저장하는 기능 제공
// src/router/index.js
import { createRouter, createWebHistory } from "vue-router";
import HomeView from "@/views/HomeView.vue";
import UserView from "@/views/UserView.vue";
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '',
name: 'home',
component: HomeView,
meta: {
title: 'Home',
},
},
{
path: '/about',
name: 'about',
component: () => import('../views/AboutView.vue'),
meta: {
title: 'About',
},
},
{
path: '/:user/:id',
name: 'user',
component: UserView
}
],
});
router.beforeEach((to, from, next) => {
if (to.meta.title) {
document.title = to.meta.title;
}
next();
});
export default router;
스크롤 동작
// src/router/index.js
import { createRouter, createWebHistory } from "vue-router";
import HomeView from "@/views/HomeView.vue";
import UserView from "@/views/UserView.vue";
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '',
name: 'home',
component: HomeView,
meta: {
title: 'Home',
},
},
{
path: '/about',
name: 'about',
component: () => import('../views/AboutView.vue'),
meta: {
title: 'About',
},
},
{
path: '/:user/:id',
name: 'user',
component: UserView
}
],
scrollBehavior(to, from, savedPosition) {
// 스크롤 위치를 저장했다면, 그 위치로 스크롤합니다.
if (savedPosition) {
return savedPosition;
} else {
// 새로운 라우트로 이동하면 맨 위로 스크롤합니다.
return { top: 0 };
}
}
});
router.beforeEach((to, from, next) => {
if (to.meta.title) {
document.title = to.meta.title;
}
next();
});
export default router;
// src/App.vue
<template>
<div id="app" @wheel="handleScroll">
<nav>
<ul>
<li><router-link to="/">Home</router-link></li>
<li><router-link to="/about">About</router-link></li>
</ul>
</nav>
<router-view />
</div>
</template>
<script>
export default {
name: 'App',
data() {
return {
lastScrollTop: 0,
ticking: false
};
},
methods: {
handleScroll(event) {
const delta = event.deltaY;
if (!this.ticking) {
window.requestAnimationFrame(() => {
if (delta > 0) {
// 스크롤 다운
if (this.$route.name === 'home') {
this.$router.push({ name: 'about' });
}
} else {
// 스크롤 업
if (this.$route.name === 'about') {
this.$router.push({ name: 'home' });
}
}
this.ticking = false;
});
this.ticking = true;
}
}
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
height: 100vh;
overflow: hidden;
}
nav ul {
list-style-type: none;
padding: 0;
}
nav li {
display: inline;
margin-right: 10px;
}
</style>
'정보교육 > 프런트엔드' 카테고리의 다른 글
코딩 자율학습단(Vue.js 프런트엔드 개발 입문) 15일차 (0) | 2024.07.04 |
---|---|
코딩 자율학습단(Vue.js 프런트엔드 개발 입문) 14일차 (0) | 2024.07.04 |
코딩 자율학습단(Vue.js 프런트엔드 개발 입문) 12일차 (1) | 2024.07.03 |
vue.js 프런트엔드 개발 입문(김기수) 도서 후기 (0) | 2024.06.28 |
코딩 자율학습단(Vue.js 프런트엔드 개발 입문) 10일차 (0) | 2024.06.28 |