일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리트코드
- CS
- 배열
- Level3
- Level2
- 고득점Kit
- LeetCode
- 동적계획법
- 웹프로그래밍
- OS
- 자바스크립트
- 프로그래밍
- 리액트
- dp
- python
- sql
- 코테연습
- typescript
- 프로그래머스
- 파이썬
- javascript
- web
- Level1
- react
- VUE
- Doitvue.js입문
- C++
- Medium
- 백준
- 카카오
- Today
- Total
[Vue] 뷰 라우터 (Router, Nested Router, Named View) 본문
Do it! Vue.js 입문을 읽고 정리한 내용입니다.
뷰 라우터
기본 라우터
라우팅이란 웹 페이지 간의 이동 방법을 말하는 것으로 SPA에서 주로 사용하고 있다.
뷰 라우터는 뷰에서 라우팅 기능을 구현할 수 있도록 지원하는 공식 라이브러리이다. 뷰 라우터를 이용하여 뷰로 만든 페이지 간에 자유롭게 이동할 수 있다.
<router-link to ="URL">
: 페이지 이동 태그<router-view>
: 페이지 표시 태그, 변경되는 URL에 따라 해당 컴포넌트를 뿌려주는 영역
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue router</title>
</head>
<body>
<div id="app">
<h1>뷰 라우터 예제</h1>
<p>
<router-link to="/main">Main 컴포넌트로 이동</router-link>
<router-link to="/login">Login 컴포넌트로 이동</router-link>
</p>
<router-view></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.0.1/dist/vue-router.js"></script>
<script>
const Main = { template: '<div>Main</div>' };
const Login = { template: '<div>Login</div>' };
const routes = [
{ path: '/main', component: Main },
{ path: '/login', component: Login },
];
const router = new VueRouter({
mode: 'history', // 해시(#) 없애기 위해서
routes
});
var app = new Vue({
router
}).$mount('#app');
</script>
</body>
</html>
url에 따라 페이지 깜빡임 없이 해당 컴포넌트로 이동하여 표시한다. 실제 웹 앱에서는 화면이 여러 개의 컴포넌트로 분할된 경우가 많기 때문에 여러 개의 컴포넌트들을 동시에 표시할 수 있는 라우터인 네스티드 라우터와 네임드 뷰가 필요하다.
네스티드 라우터 (Nested Router)
네스티드 라우터는 라우터로 페이지를 이동할 때 최소 2개 이상의 컴포넌트를 화면에 나타낼 수 있다.
상위 컴포넌트 1개에 하위 컴포넌트 1개를 포함하는 구조로 아래와 같이 구성해본다면
User component
ㄴ Post component
ㄴ Profile component
URL에 따라 하위 컴포넌트가 다르게 표시되게 된다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue nested router</title>
</head>
<body>
<div id="app">
<h1>Vue Nested Router</h1>
<router-link to="/user">Go to User</router-link>
<router-view></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.0.1/dist/vue-router.js"></script>
<script>
const User = {
template : `
<div>
User Component<br/>
<router-link to="/user/posts">Go to Post</router-link>
<router-link to="/user/profile">Go to Profile</router-link>
<router-view></router-view>
</div>
`
};
const UserProfile = { template: '<div>User Profile</div>' };
const UserPost = { template: '<div>User Post</div>' };
const routes = [
{
path: '/user',
component: User,
children: [
{
path : 'posts',
component: UserPost,
},
{
path: 'profile',
component: UserProfile,
},
]
},
];
const router = new VueRouter({
routes
});
var app = new Vue({
router
}).$mount('#app');
</script>
</body>
</html>
공식문서 (API Reference | Vue Router)를 참조하면 더 자세한 내용을 볼 수 있다.
네스티드 라우터의 경우 컴포넌트 수가 많아지면 한 번에 표시하는 데 한계가 있다. 이를 해결하기 위해서 네임드 뷰를 사용한다.
네임드뷰
네임드 뷰는 특정 페이지로 이동했을 때 여러 개의 컴포넌트를 동시에 표시하는 라우팅 방식이다. 상위 컴포넌트가 하위 컴포넌트를 포함하는 네스티드 라우터와 달리 네임드뷰는 같은 레벨에서 여러 개의 컴포넌트를 한 번에 표시한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Routing router</title>
</head>
<body>
<div id="app">
<h1>Vue Named View</h1>
<router-view name="header"></router-view>
<router-view></router-view>
<router-view name="footer"></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.0.1/dist/vue-router.js"></script>
<script>
const Body = {template: '<div> body </div>'};
const Header = {template: '<div> header </div>'};
const Footer = {template: '<div> footer </div>'};
const routes = [
{
path: '/',
components: {
default: Body,
header: Header,
footer: Footer,
}
},
];
const router = new VueRouter({
routes
});
var app = new Vue({
router
}).$mount('#app');
</script>
</body>
</html>
'Web > Vue' 카테고리의 다른 글
[Vue] 뷰 프로젝트 구성하기 (0) | 2022.07.13 |
---|---|
[Vue] 뷰 템플릿, 디렉티브 (0) | 2022.07.13 |
[Vue] 뷰 컴포넌트 (props, emit, eventBus) (0) | 2022.07.07 |
[Vue] Vue 인스턴스, 라이프 사이클 (0) | 2022.07.07 |
[Vue] Vue.js란 (0) | 2022.07.07 |