λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’»WEB FrontEnd/ν”„λ ˆμž„μ›Œν¬ Vue

Vue Router

<Do it! Vue.js μž…λ¬Έ>을 기본으둜 배운 λ‚΄μš©μž…λ‹ˆλ‹€.

 

μ°Έκ³ ν•˜λ©΄ 쒋을 μ‚¬μ΄νŠΈ

router.vuejs.org/kr/installation.html

router.vuejs.org/kr/api/#router-link


<Vue Router>

1. Routing

  • λΌμš°νŒ…μ΄λž€ μ›Ή νŽ˜μ΄μ§€ κ°„μ˜ 이동 방법을 λ§ν•œλ‹€.
  • λΌμš°νŒ…μ„ μ΄μš©ν•˜λ©΄ ν™”λ©΄ κ°„μ˜ μ „ν™˜μ΄ λ§€λ„λŸ½κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.
  • ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬(λ·°, λ¦¬μ•‘νŠΈ, μ•΅κΈ€λŸ¬) λͺ¨λ‘ λΌμš°νŒ…μ„ μ΄μš©ν•˜μ—¬ 화면을 μ „ν™˜ν•˜κ³  μžˆλ‹€.
  • ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , 일반 HTMLνŒŒμΌλ“€λ‘œλ„ λΌμš°νŒ… μžλ°”μŠ€ν¬λ¦½νŠΈ 라이브러리λ₯Ό μ΄μš©ν•˜μ—¬ λΌμš°νŒ… λ°©μ‹μ˜ νŽ˜μ΄μ§€ 이동을 κ΅¬ν˜„ν•  수 μžˆλ‹€.

 


2. Vue Router

λ·° λΌμš°ν„°λ₯Ό μ΄μš©ν•˜μ—¬ 뷰둜 λ§Œλ“  νŽ˜μ΄μ§€ 간에 자유둭게 이동할 수 μžˆλ‹€.

νƒœκ·Έ μ„€λͺ…
<router-link to="URLκ°’"> νŽ˜μ΄μ§€ 이동 νƒœκ·Έ
ν™”λ©΄μ—μ„œλŠ” <a>둜 ν‘œμ‹œλœλ‹€.
<router-view> νŽ˜μ΄μ§€ ν‘œμ‹œ νƒœκ·Έ
λ³€κ²½λ˜λŠ” URL에 따라 ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλ₯Ό λΏŒλ €μ£ΌλŠ” μ˜μ—­μ΄λ‹€.

ex) 

<!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>
    </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({
        el: '#app',
        router: router
      });
    </script>
  </body>
</html>


3. μ—¬λŸ¬ 개의 μ»΄ν¬λ„ŒνŠΈλ₯Ό λ™μ‹œμ— ν‘œμ‹œν•  수 μžˆλŠ” λΌμš°ν„°

1) Nested Router

  • λΌμš°ν„°λ‘œ νŽ˜μ΄μ§€λ₯Ό 이동할 λ•Œ μ΅œμ†Œ 2개 μ΄μƒμ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό 화면에 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.
  • μƒμœ„ μ»΄ν¬λ„ŒνŠΈ 1κ°œμ— ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈ 1개λ₯Ό ν¬ν•¨ν•˜λŠ” ꡬ쑰이닀.
  • URL에 λ”°λΌμ„œ μ»΄ν¬λ„ŒνŠΈμ˜ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκ°€ λ‹€λ₯΄κ²Œ ν‘œμ‹œλœλ‹€.

ex)

<!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. User μ»΄ν¬λ„ŒνŠΈκ°€ 뿌렀질 μ˜μ—­
      <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>
    
      //2.μ»΄ν¬λ„ŒνŠΈ λ‚΄μš© μ •μ˜
      var User = {
        template: `
          <div>
            User Component
            //3. ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκ°€ 뿌렀질 μ˜μ—­
            <router-view></router-view>
          </div>
        `
      };
      var UserPost = { template: '<p>User Post Component</p>' };
      var UserProfile = { template: '<p>User Profile Component</p>' };
      
      //4. λ„€μŠ€ν‹°λ“œ λΌμš°νŒ… μ •μ˜
      var routes = [
        {
          path: '/user', component: User,
          children: [
            {
              path: 'post',
              component: UserPost
            },
            {
              path: 'profile',
              component: UserProfile
            },

          ]
        }
      ];
      
      //5. λ·° λΌμš°ν„° μ •μ˜
      var router = new VueRouter({
        routes
      });

      //6. λ·° μΈμŠ€ν„΄μŠ€μ— λΌμš°ν„° μΆ”κ°€
      var app = new Vue({
        router
      }).$mount('#app');
    </script>
  </body>
</html>

 

 

2) Named Vue

  • νŠΉμ • νŽ˜μ΄μ§€λ‘œ μ΄λ™ν–ˆμ„ λ•Œ μ—¬λŸ¬ 개의 μ»΄ν¬λ„ŒνŠΈλ₯Ό λ™μ‹œμ— ν‘œμ‹œν•˜λŠ” λΌμš°νŒ… 방식이닀.
  • 같은 λ ˆλ²¨μ—μ„œ μ—¬λŸ¬ 개의 μ»΄ν¬λ„ŒνŠΈλ₯Ό ν•œ λ²ˆμ— ν‘œμ‹œν•˜λŠ” ꡬ쑰이닀.

ex)

<!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>
  
    //1. λΌμš°νŒ… μ˜μ—­ μ •μ˜
    <div id="app">
      <router-view name="header"></router-view>
      <router-view></router-view> //name이 μ—†λŠ” κ²½μš°λŠ” λ””ν΄νŠΈ
      <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: [
          {
            //4. λ„€μž„λ“œ λ·°κ°€ 싀행될 URLμ •μ˜
            path: '/',
            //5. <router-view>의 name속성과 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ—°κ²°
            components: {
              default: Body,
              header: Header,
              footer: Footer
            }
          }
        ]
      })

      //6. μΈμŠ€ν„΄μŠ€ 생성, λ„€μž„λ“œ λ·° 정보λ₯Ό κ°–κ³  μžˆλŠ” λΌμš°ν„°λ₯Ό 포함
      var app = new Vue({
        router
      }).$mount('#app');
    </script>
  </body>
</html>

 

 

 

 

 

'πŸ’»WEB FrontEnd > ν”„λ ˆμž„μ›Œν¬ Vue' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Vue의 template속성  (0) 2020.07.04
λ·° HTTP 톡신  (0) 2020.07.02
Vue Componets 톡신  (0) 2020.07.02
Vue Componets  (0) 2020.07.02
Vue Instance  (0) 2020.07.01