뷰 라우터
- Vue.js의 라우터는 웹 페이지 간의 이동을 관리하는 도구로, SPA(Single Page Application)에서 다양한 화면 간의 네비게이션을 쉽게 처리할 수 있다. 이번 포스팅에서는 Vue 라우터의 여러 예제를 통해 라우팅의 기본 개념과 다양한 구현 방식을 설명한다. 아래에는 3가지 예제, 즉 단일 컴포넌트 라우터, 네스티드(중첩) 라우터, 그리고 네임드 라우터를 다루겠다.
1. 단일 컴포넌트를 이용한 라우터 예제
첫 번째 예제는 Vue 라우터를 통해 두 개의 컴포넌트(Main, Login)를 이동하는 간단한 예제이다. router-link를 통해 사용자 인터페이스에서 링크를 생성하고, router-view를 통해 해당 경로에 맞는 컴포넌트가 표시된다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Component Registration</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>
var Main = { template: '<div>Main Component</div>' };
var Login = { template: '<div>Login Component</div>' };
var routes = [
{ path: '/main', component: Main },
{ path: '/login', component: Login }
];
var router = new VueRouter({
routes
});
var app = new Vue({
router
}).$mount('#app');
</script>
</body>
</html>
설명:
- **router-link**는 페이지 간 이동을 처리하는 Vue 라우터의 전용 태그로, to 속성에 이동할 경로를 설정한다.
- **router-view**는 현재 경로에 맞는 컴포넌트를 렌더링하는 자리표시자 역할을 한다.
- 라우트 설정에서 /main과 /login 경로에 각각 Main과 Login 컴포넌트를 매핑하여 화면을 전환한다.
2. 네스티드(Nested) 라우터 예제
두 번째 예제는 네스티드 라우터로, 상위 컴포넌트(User) 안에 하위 컴포넌트(UserProfile, UserPost)가 중첩되어 있는 구조를 다룬다. 이런 방식은 한 페이지에서 여러 계층의 컴포넌트를 효율적으로 관리할 때 유용하다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Nested Router</title>
</head>
<body>
<div id="app">
<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>
var User = {
template: `
<div>
User Component
<router-view></router-view>
</div>
`
};
var UserProfile = { template: '<p>User Profile Component</p>' };
var UserPost = { template: '<p>User Post Component</p>' };
var routes = [
{
path: '/user',
component: User,
children: [
{
path: 'posts',
component: UserPost
},
{
path: 'profile',
component: UserProfile
}
]
}
];
var router = new VueRouter({
routes
});
var app = new Vue({
router
}).$mount('#app');
</script>
</body>
</html>
결과
- 네스티드 라우터는 상위 컴포넌트(User) 안에서 하위 컴포넌트(UserProfile, UserPost)를 중첩하여 처리한다.
- /user 경로에 접속하면 User 컴포넌트가 렌더링되고, 그 안에서 /user/posts 또는 /user/profile로 이동할 때마다 해당 하위 컴포넌트가 router-view에 표시된다.
3. 네임드 라우터 예제
네임드 라우터는 페이지 내에서 여러 router-view를 사용해야 하는 경우 유용하다. 네임드 라우터는 각 router-view에 고유한 이름을 부여하고, 라우트 설정에서 그 이름을 참조하여 해당 컴포넌트를 렌더링한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Named Router</title>
</head>
<body>
<div id="app">
<router-view name="header"></router-view>
<router-view></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>
var Header = { template: '<div>Header Component</div>' };
var MainContent = { template: '<div>Main Content Component</div>' };
var routes = [
{
path: '/',
components: {
default: MainContent, // 기본 router-view에 렌더링
header: Header // 이름이 지정된 router-view에 렌더링
}
}
];
var router = new VueRouter({
routes
});
var app = new Vue({
router
}).$mount('#app');
</script>
</body>
</html>
설명:
- 네임드 라우터는 한 페이지에서 여러 router-view를 사용하고 각각 다른 컴포넌트를 렌더링할 때 유용하다.
- 경로 설정에서 components 속성을 사용하여 각 router-view에 렌더링할 컴포넌트를 지정할 수 있다. 기본 router-view에는 default 컴포넌트를, 이름이 지정된 router-view에는 해당 이름을 가진 컴포넌트를 매핑한다.
결론
Vue 라우터는 SPA에서 매우 강력한 기능을 제공한다. 이 포스팅에서는 기본적인 단일 컴포넌트 라우터, 네스티드 라우터, 그리고 네임드 라우터 예제를 다뤘다. 각 방법은 웹 애플리케이션의 복잡성에 따라 적절히 사용할 수 있으며, Vue.js로 동적인 SPA를 쉽게 만들 수 있도록 도와준다.
'웹 개발 > Vue.js' 카테고리의 다른 글
[Vue.js] 컴포넌트 통신 (0) | 2024.10.12 |
---|---|
[Vue.js] 뷰 컴포넌트 (0) | 2024.10.12 |
[Vue.js] 뷰 인스턴스 (0) | 2024.10.11 |
[Vue.js] Hello Vue.js 프로젝트 만들기 (0) | 2024.10.10 |
[Vue.js] Vue.js란? (0) | 2024.10.10 |