개발자의 끄적끄적

[vue.js] 처음 시작하는 Vue.js(2) 뷰 라우터 중첩 라우터부터 네임드 뷰까지 본문

개발

[vue.js] 처음 시작하는 Vue.js(2) 뷰 라우터 중첩 라우터부터 네임드 뷰까지

효벨 2020. 7. 10. 01:00
728x90
반응형

[vue.js] 처음 시작하는 Vue.js(2) 뷰 라우터 중첩 라우터부터 네임드 뷰까지

 

라우팅


라우팅이란 웹 페이지간의 이동 방법을 말한다. 라우팅은 현대 웹앱 형태 중 하나인 싱글 페이지 에플리케이션에서 주로 사용된다.

 

싱글 페이지 에플리케이션이란 서버에 웹 페이지를 요청하지 않고, 미리 해당 페이지를 받아 놓고 이동시에 클라이언트의 라우팅을 이용하여 화면을 갱신하는 패턴을 적용한 어플리케이션을 말한다.

 

뷰 뿐만 아니라 리엑트, 엥귤러는 모두 라우팅을 이용한 화면 전환을 지원하고 있으며 Fouc 현상이 일어나지 않아 화면을 더 빠르고 매끄럽게 전환할 수 있다.

 

Route 예제

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <div id="app">
      <router-link to="/main">Link To Main</router-link>
      <router-link to="/login">Link To Login</router-link>
      <!--url 값을 변경하는 태그   -->
      <p>
        <router-view></router-view>
        <!--url 값에 따라 갱신되는 화면 영역-->
      </p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  <script>
  var Main = {template: '<div>Main!</div>'};
  var Login = {template: '<div>login!!!</div>'};
  // Main, Login 컴포넌트 정의
  var routes = [
    {path : '/main', component:Main},
    {path : '/login', component:Login},
  ];
  //각 url에 맞춰서 표시할 컴포넌트 지정
  var router = new VueRouter({
    routes
  });
  // 뷰 라우터 정의
  var app = new Vue({
    router
  }).$mount('#app');
  // 뷰 인스턴스에 라우터 추가
  </script>
  </body>
</html>

 

 

네스티드 라우터


네스티드 라우터를 사용하면 페이지를 이동할 때 최소 2개 이상의 컴포넌트를 화면에 나타낼 수 있다.

 

밑의 예제를 보자

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <div id="app">
        <router-view></router-view>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  <script>
  var User = {
    template:
    `
    <div>
    User Component!!!
    <router-view></router-view>
    </div>
    `
    };
    // 위 <router-view></router-view>에 하위 컴포넌트가 뿌러진다. (위 탬플릿 생성 `` 사용임을 주의)

    var UserProfile = {template: '<p>User Profile!!!</p>' };
    var UserPost = {template: '<p>User Posts!!!</p>' };
    // 하위 컴포넌트의 정의

    var routes = [
      {
        path: '/users',
        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>

 

위 예제에서 화면을 보기 위해서는 중첩 라우터의 최상위 컴포넌트인 /users에 직접 접속해야 한다. 또한 하나의 url path 당 하나의 컴포넌트만을 볼 수 있어 화면 구성에 제약이 생긴다. 이를 해결하기 위해 나온 것이 네임드이다.

 

 

네임드 뷰


네임드 뷰는 특정 페이지로 이동했을 때 여러개의 컴포넌트를 동시에 표시하느 라우팅 방식이다. 네스티드 라우터는 상위 컴포넌트가 하위 컴포넌트를 포함하지만, 네임드 뷰는 같은 레벨의 여러개의 컴포넌트를 한번에 표시한다.

 

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <div id="app">
        <router-view name = "one"></router-view>
        <router-view name = "two"></router-view>
        <router-view></router-view> <!--이름이 없는 경우 default이다.-->
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  <script>
    var One = {template: '<p>하나</p>' };
    var Two = {template: '<p>둘!</p>' };
    var Default = {template: '<p>디폴트</p>' };

    var routes = [
      {
        path: '/',
        components:{
          // router view와 name 속성을 연결
          default : Default,
          one:One,
          two:Two
        }
      }
    ];
  var router = new VueRouter({
    routes
  });
  var app = new Vue({
    router
  }).$mount('#app');
  </script>
  </body>
</html>

 

 

출처 : https://mber.tistory.com/15

반응형
Comments