Search

라우터 vue-router

대분류
프레임워크
소분류
Vue.js
설명
useroute/userouter
유형
Vue
부유형
구조
함수
주요 레퍼런스
https://velog.io/@tata-v_vlelog/Vue-Vue-Router-%EC%82%AC%EC%9A%A9%EB%B2%95
https://router.vuejs.kr/guide/advanced/meta
속성
vue
최종 편집 일시
2024/10/31 03:29
생성 일시
2024/01/25 07:35
11 more properties

router/index.ts

서버에서 바로 불러오는 애들 → App.js에서 바로 가져온다.
{ path: '/', name: 'home', component: HomeView },
JavaScript
복사
메뉴로 바로 불러와야한다, 사이즈가 커서 미리 불러와야 할것 같다. → webpackPrefetch:true로 설정
{ path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import( /* webpackChunkName: "about", webpackPrefetch:true */ '../views/AboutView.vue') }
JavaScript
복사
들어갈 빈도가 적거나, 사이즈가 작다 → webpack 제거
{ path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import( /* webpackChunkName: "about" */ '../views/AboutView.vue') }
JavaScript
복사

Router, Route

Router : 어디로 이동하는 것
Route : 현재 상태를 읽어오는 것

RouterLink

페이지를 리로딩하지 않고 URL에 매핑된 페이지를 렌더링 한다.
<RouterLink to="/about">About</RouterLink> // active-class <RouterLink active-class="active" to="/about">About</RouterLink>
HTML
복사

현재 경로, 경로 이름 알아내기

<template> <ul> <li>$route.name: {{ $route.name }}</li> <li>$route.path: {{ $route.path }}</li> </ul> </template>
HTML
복사

useRouter, useRoute

useRouter : 라우터 인스턴스로 javascript에서 다른 페이지로 이동 가능
useRoute : 현재 활성 라우트 정보에 접근 가능. (읽기 전용-readonly)
<script setup> import { useRoute, useRouter } from 'vue-router'; const router = useRouter(); const route = useRoute(); console.log('route.name: ', route.name); console.log('route.path: ', route.path); const goAboutPage = () => router.push('/about'); </script> <template> <h1>Home Page</h1> <button @click="goAboutPage">About 페이지로 이동</button> </template>
HTML
복사

동적 라우팅 - params

const routes = [ { path: '/posts/:id', component: PostDetailView, }, { path: '/posts/:id/edit', component: PostEditView, }, ]; const router = createRouter({ history: createWebHistory('/'), routes, });
JavaScript
복사
<div>User {{ $route.params.id }}</div>'
JavaScript
복사

경로 메타 필드

임의의 정보(예: 누가 경로에 접근 가능한지, 트랜지션 이름 등)를 추가하면, 경로 위치 및 탐색 가드에서 접근 가능
const routes = [ { path: '/posts', component: PostsLayout, children: [ { path: 'new', component: PostsNew, // 유저 인증 필수 meta: { requiresAuth: true }, }, { path: ':id', component: PostsDetail, // 유저 인증 없어도 됨 meta: { requiresAuth: false }, }, ], }, ]
JavaScript
복사
meta 필드 접근 방법
router.beforeEach((to, from) => { // to.matched.some(record => record.meta.requiresAuth)와 같이 // 모든 경로 레코드를 확인하는 대신, `to.meta.requiresAuth`처럼 바로 접근 가능 if (to.meta.requiresAuth && !auth.isLoggedIn()) { // 이 경로는 인증이 필수이므로, 로그인 여부를 확인하고, // 만약 인증되지 않았다면 로그인 페이지로 리디렉션 return { path: '/login', // 나중에 다시 올 수 있도록, 방문한 위치를 저장 query: { redirect: to.fullPath }, } } })
JavaScript
복사
ts 메타 필드 입력
// `router.ts`와 같은 `.ts` 파일에 직접 추가할 수 있습니다. // `.d.ts` 파일에 추가할 수도 있습니다. // 프로젝트의 tsconfig.json "파일"에 포함되어 있는지 확인하십시오. import 'vue-router' // 모듈로 처리되도록 하려면 `export` 문을 하나 이상 추가하세요. export {} declare module 'vue-router' { interface RouteMeta { // 선택적 isAdmin?: boolean // 모든 경로에서 선언해야 함 requiresAuth: boolean } }
TypeScript
복사