[Vue.js] 03 Router

2021. 9. 23. 14:18Study/Vue.js

반응형

Vue Router

  • 웹페이지 간의 이동 방법 
  • 최신 웹 앱 형태 중 하나인 SPA(Single Page Application)에서 주로 사용
  • 화면 간의 전환이 매끄러울 뿐만 아니라 애플리케이션의 UX를 향상시킬 수 있다.
    • 일반적으로 브라우저에서 웹 페이지를 요청하면 서버에서 응답을 받아 웹 페이지를 다시 사용자에게 돌려주는 시간 동안 화면 상에 깜빡거림 현상이 나타난다.
    • 라우팅으로 처리하면 깜빡거림 없이 화면을 매끄럽게 전환할 수 있을 뿐만 아니라 더 빠르게 화면을 조작할 수 있어 사용자 경험이 향상된다.

설치

CDN 방식

<script src="https://unpkg.com/vue-router/dist/vue-router.js">

 

NPM 방식

npm install vue-router

뷰 라우터 등록

  • 뷰 라우터를 설치하고 나면 아래 코드와 같이 라우터 인스턴스를 하나 생성하고 뷰 인스턴스에 등록한다.
// 라우터 인스턴스 생성
var router = new VueRouter({
  // 라우터 옵션
})

// 인스턴스에 라우터 인스턴스를 등록
new Vue({
  router: router
})

뷰 라우터 옵션

var router = new VueRouter({
  // URL의 # 제거 속성
  // ex) http://localhost:63342/sd/frontend/src/playground/router.html/#/login
  mode: 'history',
  //페이지의 라우팅 정보
  routes: [
    {
      // 페이지의 url 이름
      path: '/login',
      // 해당 url에서 표시될 컴포넌트
      component: LoginComponent
    },
    {
      path: '/main',
      component: MainComponent
    }
  ]
});

 

뷰 라우터 태그

router-view

  • 브라우저의 주소 창에서 URL이 변경되면, 앞에서 정의한 routes 속성에 따라 해당 컴포넌트가 화면에 뿌려진다
  • 화면에서 특정 링크를 클릭해서 페이지를 이동할 수 있게 해준다.
  • 실제로 화면에선 <a> 태그로 변환되어서 나온다.
<div id="app">
  <div>
    <router-link to="/login">Login</router-link>
    <router-link to="/main">Main</router-link>
  </div>
  <router-view></router-view>
</div>



Nested Routers

  • 라우터로 화면 이동 시 Nested Routers를 이용하여 여러개의 컴포넌트를 동시에 렌ㅓ링 할 수 있다.
  • 렌더링 되는 컴포넌트의 구조는 가장 큰 상위의 컴포넌트가 하위의 컴포넌트를 포함하는 Parent - Child 형태와 같

<!‐‐ localhost:5000 ‐‐>
<div id="app">
    <router‐view></router‐view>
</div>

<!‐‐ localhost:5000/home ‐‐>
<!‐‐ parent component ‐‐> 
<div>
    <p>Main Component rendered</p> 
    <!‐‐ child compoonent ‐‐> 
    <app‐header></app‐header>
</div>
// localhost:5000/home
{
    path : '/home',
    component: Main,
    children: [
        {
            path: '/',
            component: AppHeader
        },
        {
            path: '/list',
            component: List
        },
    ]
}

 

주의사항

  • Vue의 Template 에는 최상위 태그가 1개만 있어야 렌더가 가능하다.
var Foo = {
template: `
    <div>foo</div>
    <router‐view></router‐view>
` // 에러 발생
};

  • 여러 개의 태그를 최상위 태그 레벨에 동시에 위치시킬 수 없음.
  • 따라서 아래와 같이 최상위 Element는 한개만 지정해야 한다.
var Foo = {
// div 태그 안에 텍스트와 `router‐view` 포함하여 정상 동작
template: `
    <div>foo
        <router‐view></router‐view>
    </div>`
};

 

 

 

출철 : https://www.inflearn.com/course/Age-of-Vuejs

반응형

'Study > Vue.js' 카테고리의 다른 글

[Vue.js] 09 ES6  (0) 2021.09.24
[Vue.js] 07 SFC(Single File Component)  (0) 2021.09.24
[Vue.js] 05 Template  (0) 2021.09.23
[Vue.js] 02 Component  (0) 2021.09.23
[Vue.js] 01 Instance  (0) 2021.09.23