๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Vue.js

Vue.js(2) vue ์ธ์Šคํ„ด์Šค ๋ฐ ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ•

by Jo__y 2022. 10. 9.

Vue Instance

  • Vue.js ํ™”๋ฉด ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๊ผญ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ๋‹จ์œ„์ด๋‹ค.Instance ์ƒ์„ฑ
  • // ์ƒˆ๋กญ๊ฒŒ Vue๋ฅผ ์„ ์–ธ new Vue({ el: '#app', // ์–ด๋–ค ์š”์†Œ์— ์ ์šฉ์„ ํ•  ์ง€ ์ •ํ•จ ์—ฌ๊ธฐ์„œ๋Š” HTML ์ฝ”๋“œ์— ์„ ์–ธ๋œ id="app"์ธ div ํƒœ๊ทธ๋ฅผ ์ง€์ • data: { // data ๋Š” ํ•ด๋‹น VueJS์—์„œ ์‚ฌ์šฉํ•  ์ •๋ณด๋“ค์„ ์„ ์–ธํ•ด์ฃผ๋Š” ์—ญํ•  title: '์•ˆ๋…• VueJS!' } })

์ธ์Šคํ„ด์Šค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ๊ณผ API

new Vue({
  el: ,   // ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ํ™”๋ฉด์˜ ์‹œ์ž‘์  (ํŠน์ • HTMLํƒœ๊ทธ)
  template: ,   // ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์š”์†Œ (HTML, CSS ๋“ฑ)
  data: ,  // ๋ทฐ์˜ ๋ฐ˜์‘์„ฑ(Reactivity) ๊ฐ€ ๋ฐ˜์˜๋œ ๋ฐ์ดํ„ฐ ์†์„ฑ
  methods: ,  // ํ™”๋ฉด์˜ ๋™์ž‘๊ณผ ์ด๋ฒคํŠธ ๋กœ์ง์„ ์ œ์–ดํ•˜๋Š” ๋ฉ”์„œ๋“œ
  created: ,  // ๋ทฐ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด๊ณผ ๊ด€๋ จ๋œ ์†์„ฑ
  watch: ,  // data ์—์„œ ์ •์˜ํ•œ ์†์„ฑ์ด ๋ณ€ํ™”ํ–ˆ์„ ๋•Œ ์ถ”๊ฐ€ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ •์˜
});

Vue ๋ผ์ดํ”„ ์‚ฌ์ดํด

Vue ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์— ์žˆ์–ด, ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋“ค๋กœ์จ, ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” window.onload ์™€ ๋น„์Šทํ•œ ๋Š๋‚Œ์ด๋‹ค.

Vue ์ธ์Šคํ„ด์Šค๋Š” ์ƒ์„ฑ(Create) ๋˜๊ณ 
Dom ์— ๋ถ€์ฐฉ(Mount) ๋˜๊ณ 
์—…๋ฐ์ดํŠธ (Update) ๋˜๋ฉฐ
์—†์–ด์ง€๋Š” (Destroy) 4๊ฐ€์ง€ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

created

data ๋ฅผ ๋ฐ˜์‘ํ˜•์œผ๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋˜๋ฉฐ
computed,method,watch๋“ฑ์ด ํ™œ์„ฑํ™”๋˜์–ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.
์•„์ง Dom์—๋Š” ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋‹ค.

var app = new Vue({
    el: '#app',
    data() {
        return {
            msg: 'hello';
        }
    },
    created(function() {
        console.log(this.msg); // hello
    })
})

mounted

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” mounted ํ›…์ด๋‹ค.
๊ฐ€์ƒ Dom ๋‚ด์šฉ์ด ์‹ค์ œ Dom ์— ๋ถ€์ฐฉ๋˜๊ณ  ๋‚œ ์ดํ›„์— ์‹คํ–‰๋œ๋‹ค.
data,computed,method,watch ๋“ฑ ๋ชจ๋“  ์š”์†Œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

var app = new Vue({
    el: '#app',
    mounted(function() {
        console.log('mounted');
    })
})
created๋Š” ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”์— ๋Œ€ํ•œ ๋ชฉ์ , mounted๋Š” DOM ์กฐ์ž‘์— ๋Œ€ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ•

๋ทฐ๋ฅผ ํ™”๋ฉด์— ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ : interporation {{ }}

  • <span>๋ฉ”์‹œ์ง€: {{ msg }}</span>
    • Mustache Tag(์ด์ค‘์ค‘๊ด„ํ˜ธ) ๋ฅผ ์‚ฌ์šฉํ•œ ๋ณด๊ฐ„๋ฒ•(Interporation)
  • Mustaches ๋Š” HTML์ด ์•„๋‹Œ ์ผ๋ฐ˜ํ…์ŠคํŠธ๋กœ ํ•ด์„ ํ•œ๋‹ค.

๋””๋ ‰ํ‹ฐ๋ธŒ : Directive v-bind

v-bind ๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Vue ์ธ์Šคํ„ด์Šค ๋‚ด์— ์„ ์–ธ๋œ ๊ฐ’์„ HTML ์ฝ”๋“œ์˜ ์†์„ฑ ๊ฐ’์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
v- ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ํŠน๋ณ„ํ•œ ์†์„ฑ์œผ๋กœ ํ™”๋ฉด์˜ DOM ์กฐ์ž‘์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

v-html HTML์˜ ์ฝ”๋“œํ˜•ํƒœ๋กœ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • v-once ๋Š” HTML ์ฝ”๋“œ๋กœ ์ถœ๋ ฅ๋œ ์ดํ›„ ์–ด๋–ค ํ›„์ฒ˜๋ฆฌ๊ฐ€ ์žˆ์–ด๋„ ์ฒ˜์Œ์— ์ถœ๋ ฅํ•œ ๊ฐ’์„ ์œ ์ง€์‹œํ‚ค๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • v-on ์€ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ด๋‹ค.
    • ์ด๋ฒคํŠธ ์ˆ˜์‹์–ด
      • ์ˆ˜์‹์–ด๋Š” ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ํŠน์ˆ˜ ์ ‘๋ฏธ์‚ฌ๋กœ, ๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ”์ธ๋”ฉ ํ•ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, .prevent ์ˆ˜์‹์–ด๋Š” ํŠธ๋ฆฌ๊ฑฐ๋œ ์ด๋ฒคํŠธ์—์„œ event.preventDefault()๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก v-on ๋””๋ ‰ํ‹ฐ๋ธŒ์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.
        • <form v-on:submit.prevent="onSubmit"> ... </form>
  • v-model ์€ <form> ํƒœ๊ทธ์—์„œ submit ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ

์•ฝ์–ด

๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ์ค„์—ฌ์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค
v-bind ์™€ v-on ์— ์ œ๊ณต๋œ๋‹ค.

  • v-bind
  • <!-- ์ „์ฒด ๋ฌธ๋ฒ• --> <a v-bind:href="url"> ... </a> <!-- ์•ฝ์–ด --> <a :href="url"> ... </a>
  • v-on
  • <a v-on:click="doSomething"> ... </a> <!-- ์•ฝ์–ด --> <a @click="doSomething"> ... </a>

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€