라우팅(Routing)
라우팅 -> 웹 페이지 간의 이동 방법을 말함.
라우팅은 SPA에서 주로 사용됨.
화면 전환이 매끄러움.
화면 깜빡임 없이 화면전환 즉, 사용자 경험을 향상 시킬 수 있음.
(일반적으로 브라우저에서 요청시 서버 응답을 받으면, 화면 깜빡임 발생)
뷰뿐만 아니라 리엑트, 앵귤러 모두 라우팅을 이용해 화면 전환.
뷰 라우터(Vue Router)
라우팅 기능을 구현할 수 있도록 지원하는 공식 라이브러리.
페이지 간 이동이 자유로움
<router-link to="URL 값"> | 페이지 이동 태그. html의 a태그 역할 |
<router-view> | 페이지 표시 태그. 변경되는 url에 따라 컴포넌트를 뿌려줌. |
예제
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Vue Router Sample</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> <!--갱신된 url에 해당하는 화면 출력--> </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> // 3. Main. Login 컴포넌트 내용 정의 var Main = { template: '<div>main</div>' }; var Login = { template: '<div>login</div>' }; // 4. 각 url에 해당하는 컴포넌트 등록 var routes = [ { path: '/main', component: Main }, { path: '/login', component: Login } ]; // 5. 뷰 라우터 정의 var router = new VueRouter({ routes }); // 6. 뷰 라우터를 인스턴스에 등록 var app = new Vue({ router }).$mount('#app'); //$mount()는 el 속성과 동일하게 인스터스를 화면에 붙이는 역할 </script> </body> </html>

네스티드 라우터(Nested Router)
라우터로 페이지 이동할 때 최소 2개 이상의 컴포넌트를 화면에 나타낼 수 있음.
*nested: 중첩
<!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"> <!-- // --< 1 >-- --> <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 = { // --< 2 >-- 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 = [ // --< 3 >-- { path: '/user', component: User, children: [ { path: 'posts', component: UserPost }, { path: 'profile', component: UserProfile }, ] } ]; var router = new VueRouter({ // --< 4 >-- routes }); var app = new Vue({ // --< 5 >-- router }).$mount('#app'); </script> </body> </html>
- <div di="app">에 <router-view>를 등록하여 User 컴포넌트가 뿌려질 영역 정의
- User, UserPost, UserProfile 컴포넌트의 내용을 각 객체에 정의.
- routes에서 라우터 정보를 정의 children 속성에서 url값 user/다음에 올 url에 따라 올 컴포넌트 정의
- 이제 뷰 라우터를 새로 하나 생성하고 앞에서 정의한 라우터 정보를 담은 객체 routes를 정의.
- 마지막으로 인스턴스를 하나 생성하고 라우터 정보 router를 포함. app이라는 id를 가진 요소에 인스턴스를 붙여 화면에 나타냄.

네임드 뷰(Named View)
특정 페이지로 이동했을 대 여러 개의 컴포넌트를 동시에 표시하는 라우팅 방식.
네스티드 라우터 -> 상위 컴포넌트가 하위 컴포넌트를 포함하는 방식
네임드 뷰 -> 같은 레벨에서 여러 개의 컴포넌트를 한 번에 표시

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Vue Named View Sample</title> </head> <body> <div id="app"> <!-- --<1>-- 라우팅 영역 정의. 컴포넌트와 매칭하기 위한 속성--> <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> // --<2>-- 컴포넌트 내용 정의, 객체 선언 var Body = { template: '<div>This is Body</div>' }; var Header = { template: '<div>This is Header</div>' }; var Footer = { template: '<div>This is Footer</div>' }; // --<3>-- 라우터 정의. 라우터를 하나 생성하고, 그 안에 라우터 정보를 정의 var router = new VueRouter({ routes: [ { path: '/', // --<4>-- 네임드 뷰가 실행될 URL을 정의하는 속성 components: { // --<5>-- <router-view>의 name 속성과 컴포넌트를 연결 default: Body, header: Header, footer: Footer } } ] }) var app = new Vue({ // --<6>-- 마지막으로 인스턴스 생성하고 네임드 뷰 정보를 갖고 있는 라우터를 포함 router }).$mount('#app'); </script> </body> </html>
'IT > Vue.js' 카테고리의 다른 글
[Vue.js] Vue 템플릿(Vue template) (0) | 2021.02.20 |
---|---|
[vue.js] vue HTTP 통신 (Axios) (0) | 2021.02.20 |
[vue.js] vue component 통신 (0) | 2021.02.19 |
[vue.js] 컴포넌트(component) (0) | 2021.02.19 |
[vue.js] 인스턴스(instance) (0) | 2021.02.19 |