본문 바로가기
PROGRAMMING/Vue

[Vue] Router

by 안녕나는현서 2021. 11. 21.
728x90

Vue Router

  • 라우트(route)에 컴포넌트를 매핑한 후, 어떤 주소에서 렌더링할 지 알려줌
  • SPA 상에서 라우팅을 쉽게 개발할 수 있는 기능 제공

 

- 설치 (Vue CLI 환경)

$ vue add router
  • commit 여부 : y
  • History mode 사용 여부 : y
    • HTML History API를 사용해서 router를 구현한 것
    • 브라우저의 히스토리는 남기지만 실제 페이지는 이동하지 않는 기능 지원
    • 즉, 페이지를 다시 로드하지 않고 URL 탐색 가능
  • Vue router로 인한 변화
    • App.vue 코드
    • router/index.js 생성 : 라우트 관련 정보 및 설정 작성되는 곳
    • view 디렉토리 생성

 

- 사용

  • router-link
    • 사용자 네비게이션을 가능하게 하는 컴포넌트
    • 목표경로는 'to' prop으로 지정
    • HTML5 히스토리 모드에서 router-link는 클릭 이벤트를 차단해 브라우저가 페이지를 다시 로드하지 않도록 함
    • a태그와 비슷 (기본 get 요청을 보내는 이벤트를 제거한 형태)
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
  • router-view
    • 주어진 라우트에 대해 일치하는 컴포넌트를 렌더링하는 컴포넌트
    • 실제 component가 DOM에 부착되어 보이는 자리를 의미
    • router-link를 클릭하면 해당 경로와 연결되어 있는 index.js에 정의한 컴포넌트가 위치
<router-view/>
  • Named Routes
    • 이름을 가지는 라우트
    • 명명된 경로로 이동하려면 객체를 vue-router 컴포넌트 요소의 props에 전달
// index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import About from '@/views/About.vue'

Vue.user(VueRouter)

const routes = {
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: About
  },
}
<!-- App.vue -->

<template>
  <div id="app">
  	<router-link :to="{ name: 'Home' }">Home</router-link> |
  	<router-link :to="{ name: 'About' }">Home</router-link>
  </div>
</template>
  • 프로그래밍 방식 네비게이션
    • <router-link>를 사용하여 선언적 탐색을 위한 a태그를 만드는 것 외에도, router의 인스턴스 메서드를 사용하여 프로그래밍 방식으로 같은 작업을 수행할 수 있음
    • Vue 인스턴스 내부에서 라우터 인스턴스에 $router로 접근할 수 있음
    • 다른 URL로 이동하려면 this.$router.push를 호출할 수 있음
    • <router-link>를 클릭할 때 내부적으로 호출되는 메서드
// literal string path
router.push('home')

// object
router.push({ path: 'home' })

// named route
router.push({ name: 'user', params: { userId: '123' } })

// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' } })
  • 동적 인자 전달 : 주어진 패턴을 가진 라우트를 동일한 컴포넌트에 매핑해야 하는 경우 
    • 동적 인자는 : (콜론)으로 시작
    • 컴포넌트에서 this.$route.params 로 사용가능

// index.js

const routes = [
  {
    path: '/user/:userId',
    name: 'User',
    component: User
  },
]
// About.vue

<template>
  <div>
    {{ $route.params.userId }}
  </div>
</template>
// APP.vue

<template>
  <div>
    <router-link :to="{ name: 'userId', params: { userId: 'John' } }">userId</router-link>
    <router-view/>
  </div>
</template>

 

* components와 views

  • views/ : router(index.js)에 매핑되는 컴포넌트를 모아두는 폴더
  • components/ : router에 매핑된 컴포넌트 내부에 작성하는 컴포넌트를 모아두는 폴더
728x90

'PROGRAMMING > Vue' 카테고리의 다른 글

[Vue] Components  (0) 2021.11.20
[Vue] Vue CLI  (0) 2021.11.20
[Vue] Lifecycle Hooks, lodash  (0) 2021.11.15
[Vue] Template Syntax  (0) 2021.11.15
[Vue] MVVM Pattern, Vue 인스턴스 생성  (0) 2021.11.15

댓글