Skip to content

Latest commit

ย 

History

History
ย 
ย 

guide

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 
ย 
ย 

์‹œ์ž‘ํ•˜๊ธฐ

::: tip ์ฐธ๊ณ  ์ด ๊ฐ€์ด๋“œ๋Š” ์ฝ”๋“œ์ƒ˜ํ”Œ์— ES2015๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋“  ์˜ˆ์ œ๋Š” Vue ์ •์‹ ๋ฒ„์ „์„ ์ด์šฉํ•ด ๋ฐ”๋กœ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜์„ธ์š”. :::

Vue์™€ Vue ๋ผ์šฐํ„ฐ๋ฅผ ์ด์šฉํ•ด ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. Vue.js๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด๋ฏธ ์ปดํฌ๋„ŒํŠธ๋กœ ์•ฑ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Vue ๋ผ์šฐํ„ฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ๋ผ์šฐํŠธ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งคํ•‘ํ•œ ํ›„, ์–ด๋–ค ์ฃผ์†Œ์—์„œ ๋ Œ๋”๋งํ•  ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ ๋ฟ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ๊ธฐ๋ณธ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

HTML

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

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!-- ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์œ„ํ•ด router-link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. -->
    <!-- ๊ตฌ์ฒด์ ์ธ ์†์„ฑ์€ `to` prop์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. -->
    <!-- ๊ธฐ๋ณธ์ ์œผ๋กœ `<router-link>`๋Š” `<a>` ํƒœ๊ทธ๋กœ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.-->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!-- ๋ผ์šฐํŠธ ์•„์šธ๋ › -->
  <!-- ํ˜„์žฌ ๋ผ์šฐํŠธ์— ๋งž๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค. -->
  <router-view></router-view>
</div>

JavaScript

// 0. ๋ชจ๋“ˆ ์‹œ์Šคํ…œ (์˜ˆ: vue-cli)์„ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, Vue์™€ Vue ๋ผ์šฐํ„ฐ๋ฅผ import ํ•˜์„ธ์š”
// ๊ทธ๋ฆฌ๊ณ  `Vue.use(VueRouter)`๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”


// 1. ๋ผ์šฐํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜์„ธ์š”.
// ์•„๋ž˜ ๋‚ด์šฉ๋“ค์€ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

// 2. ๋ผ์šฐํŠธ๋ฅผ ์ •์˜ํ•˜์„ธ์š”.
// Each route should map to a component. The "component" can
// ๊ฐ ๋ผ์šฐํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ์ปดํฌ๋„ŒํŠธ์™€ ๋งคํ•‘๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
// "component"๋Š” `Vue.extend()`๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„
// ์‹ค์ œ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ์ž์ด๊ฑฐ๋‚˜ ์ปดํฌ๋„ŒํŠธ ์˜ต์…˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 3. `routes` ์˜ต์…˜๊ณผ ํ•จ๊ป˜ router ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ์„ธ์š”.
// ์ถ”๊ฐ€ ์˜ต์…˜์„ ์—ฌ๊ธฐ์„œ ์ „๋‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
// ์ง€๊ธˆ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
const router = new VueRouter({
  routes // `routes: routes`์˜ ์ค„์ž„
})

// 4. ๋ฃจํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  mount ํ•˜์„ธ์š”.
// router์™€ router ์˜ต์…˜์„ ์ „์ฒด ์•ฑ์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
const app = new Vue({
  router
}).$mount('#app')

// ์ด์ œ ์•ฑ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค!

๋ผ์šฐํ„ฐ๋ฅผ ์ฃผ์ž…ํ•˜์˜€์œผ๋ฏ€๋กœ this.$router์™€ ํ˜„์žฌ ๋ผ์šฐํŠธ๋ฅผ this.$route๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// Home.vue
export default {
  computed: {
    username () {
      // ๊ณง `params` ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      return this.$route.params.username
    }
  },
  methods: {
    goBack () {
      window.history.length > 1
        ? this.$router.go(-1)
        : this.$router.push('/')
    }
  }
}

๋ฌธ์„œ ์ „์ฒด์—์„œ router๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. this.$router๋Š” ์ •ํ™•ํžˆ router์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. this.$router๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ์กฐ์ž‘ํ•ด์•ผํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ผ์šฐํŠธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ ๋ฐ”๋กœ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<router-link>๋Š” ํ˜„์žฌ ๋ผ์šฐํŠธ์™€ ์ผ์น˜ํ•  ๋•Œ ์ž๋™์œผ๋กœ .router-link-active ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. API ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ™•์ธํ•˜์„ธ์š”.