뷰 라우터 설치 및 연결
뷰 라우터 설치
npm i vue-router
뷰 라우터 연결
1. src/routes/index.js
에 VueRouter 생성
import Vue from 'vue';
import VueRouter from 'vue-router';
// VueRouter 사용
Vue.use(VueRouter);
// VueRouter 인스턴스 생성 및 export
export default new VueRouter();
2. src/main.js
에 VueRouter 모듈 등록
import Vue from 'vue';
import App from './App.vue';
// VueRouter import
import router from '@/routes/index';
Vue.config.productionTip = false;
new Vue({
render: h => h(App),
// VueRouter 연결
router,
}).$mount('#app');
페이지 컴포넌트 생성 및 연결
컴포넌트 생성
1. src/views
에 LoginPage.vue
, SignupPage.vue
생성
<!-- LoginPage -->
<template>
<div>login</div>
</template>
<script>
export default {};
</script>
<style></style>
<!-- SignupPage -->
<template>
<div>
signup
</div>
</template>
<script>
export default {};
</script>
<style></style>
컴포넌트 연결
1. src/routes/index.js
에 페이지 컴포넌트 등록
import Vue from 'vue';
import VueRouter from 'vue-router';
// 컴포넌트 import
import LoginPage from '@/views/LoginPage.vue';
import SignupPage from '@/views/SignupPage.vue';
Vue.use(VueRouter);
export default new VueRouter({
// routes속성 이용하여 경로와 컴포넌트 등록
routes: [
{
path: '/login',
component: LoginPage,
},
{
path: '/signup',
component: SignupPage,
},
],
});
라우팅 동작 확인
1. src/App.vue
에 <router-link>
, <router-view>
사용
<template>
<div>
<header>
<!-- to: 이동할 페이지 경로 지정 -->
<router-link to="/login">로그인</router-link> |
<router-link to="/signup">회원가입</router-link>
</header>
<!-- router-view: router-link를 통해 이동한 페이지를 보여주는 영역 -->
<router-view></router-view>
</div>
</template>
<script>
export default {};
</script>
<style></style>
2. 동작 확인
코드 스플리팅 소개 및 적용
코드 스플리팅 소개
코드 스플리팅은 싱글 페이지 애플리케이션의 성능을 향상시키는 방법이다. 싱글 페이지 애플리케이션은 초기 실행 시 필요한 웹 자원을 모두 다운 받는 특징이 있는데 코드 스플리팅을 활용하게 되면 초기 로딩시에 모든 웹 자원을 다운받지 않고 필요한 시점에 다운받아 성능을 향상시킬 수 있다.
코드 스플리팅 적용
1. src/routes/index.js
에 코드 스플리팅 적용
import Vue from 'vue';
import VueRouter from 'vue-router';
// import LoginPage from '@/views/LoginPage.vue';
// import SignupPage from '@/views/SignupPage.vue';
Vue.use(VueRouter);
export default new VueRouter({
routes: [
{
path: '/login',
// dynamic import를 이용하여 해당 경로로 접근시 웹 자원을 다운 및 사용
component: () => import('@/views/LoginPage.vue'),
},
{
path: '/signup',
component: () => import('@/views/SignupPage.vue'),
},
],
});
초기 진입 페이지 설정
리다이렉트 소개
특정 URL로 접근 시 지정된 URL로 이동하게 하는 것
리다이렉트 설정
1. src/routes/index.js
에 리다이렉트 설정
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
export default new VueRouter({
routes: [
{
// '/' 요청시 '/login'으로 전환
path: '/',
redirect: '/login',
},
{
path: '/login',
component: () => import('@/views/LoginPage.vue'),
},
{
path: '/signup',
component: () => import('@/views/SignupPage.vue'),
},
],
});
없는 페이지 접근 시 라우터 처리
없는 페이지 접근 시 처리 방법
뷰 라우터에 등록되지 않은 path를 통해 접근할 때 오류를 알려주는 컴포넌트를 표시하도록 등록된 경로 이외에 모든 경로를 지칭하는 *
를 사용하여 오류 컴포넌트를 등록한다.
방법
1. src/routes/index.js
에 오류 컴포넌트 등록
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
export default new VueRouter({
routes: [
{
path: '/',
redirect: '/login',
},
{
path: '/login',
component: () => import('@/views/LoginPage.vue'),
},
{
path: '/signup',
component: () => import('@/views/SignupPage.vue'),
},
{
// 위에 등록된 path이외의 모든 path
path: '*',
component: () => import('@/views/NotFoundPage.vue'),
},
],
});
2. src/views/NotFoundPage.vue
생성
<template>
<div>
Page is not found
</div>
</template>
<script>
export default {};
</script>
<style></style>
3. 동작 확인
Mode: History 설정
History 모드 사용 시
URL 중간에 있는 #(해시)
을 제거해준다.
History 모드 사용 시 단점 (참고)
URL에 #(해시)
가 존재하지 않기 때문에 서버가 해당 정보가 있는지 없는지 알지 못한다. 그렇기 때문에 배포시에 각 서버에 맞게 포괄적인 대체 경로를 추가 설정을 해야 한다. (참고)
History 모드 설정
1. src/routes/index.js
에 history 모드 설정
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
export default new VueRouter({
// history 모드 설정
mode: 'history',
routes: [
{
path: '/',
redirect: '/login',
},
{
path: '/login',
component: () => import('@/views/LoginPage.vue'),
},
{
path: '/signup',
component: () => import('@/views/SignupPage.vue'),
},
{
path: '*',
component: () => import('@/views/NotFoundPage.vue'),
},
],
});
2. 동작 확인
'Dev > Vue.js' 카테고리의 다른 글
[Vue.js] Today I Learned - 공통 환경 설정 (0) | 2020.10.26 |
---|---|
[Vue.js] Today I Learned - 회원 가입 (0) | 2020.10.26 |
[Vue.js] Today I Learned - 프로젝트 생성 및 환경 구성 (0) | 2020.10.13 |
[Vue.js] Today I Learned - API 프로젝트 구성 (0) | 2020.10.07 |
[Vue.js] Today I Learned 소개 (0) | 2020.10.07 |
댓글