๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript/Vue

[Vue.js] Vue Directive

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2022. 6. 6.
๋ฐ˜์‘ํ˜•

Vue Directive(๋ทฐ ๋””๋ ‰ํ‹ฐ๋ธŒ)๋ž€ HTML ํƒœ๊ทธ ์•ˆ์— v- ์ ‘๋‘์‚ฌ๋ฅผ ๊ฐ€์ง€๋Š” ๋ชจ๋“  ์†์„ฑ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค.

๋””๋ ‰ํ‹ฐ๋ธŒ๋Š” ํ™”๋ฉด์˜ ์š”์†Œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๋ทฐ์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ํ™”๋ฉด์˜ ์š”์†Œ๋“ค์ด ๋ฆฌ์•กํ‹ฐ๋ธŒํ•˜๊ฒŒ ๋ฐ˜์‘ํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ ๊ฐ’์— ๋”ฐ๋ผ ๊ฐฑ์‹ ๋œ๋‹ค.

์ฆ‰, ํ™”๋ฉด์˜ ์š”์†Œ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ํ•„์š” ์—†์ด ๋ทฐ์˜ ๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ™”๋ฉด ์š”์†Œ๋“ค์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

v-if ์ง€์ •ํ•œ ๋ทฐ ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ์ฐธ, ๊ฑฐ์ง“ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํ•ด๋‹น HTML ํƒœ๊ทธ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.
v-for ์ง€์ •ํ•œ ๋ทฐ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ํ•ด๋‹น HTML ํƒœ๊ทธ๋ฅผ ๋ฐ˜๋ณต ์ถœ๋ ฅํ•œ๋‹ค.
v-show v-if์™€ ์œ ์‚ฌํ•˜๋‹ค. ๋‹ค๋งŒ, v-if๋Š” ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜์ง€๋งŒ v-show๋Š” css ํšจ๊ณผ๋งŒ display:none;์œผ๋กœ ์ฃผ์–ด ์‹ค์ œ ํƒœ๊ทธ๋Š” ๋‚จ์•„ ์žˆ๊ณ  ํ™”๋ฉด ์ƒ์œผ๋กœ๋งŒ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
v-bind HTML ํƒœ๊ทธ์˜ ๊ธฐ๋ณธ ์†์„ฑ๊ณผ ๋ทฐ ๋ฐ์ดํ„ฐ ์†์„ฑ์„ ์—ฐ๊ฒฐํ•œ๋‹ค.
v-on ํ™”๋ฉด ์š”์†Œ์˜ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, v-on:click์€ ํ•ด๋‹น ํƒœ๊ทธ์˜ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
v-model ํผ(form)์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ. ํผ์— ์ž…๋ ฅํ•œ ๊ฐ’์„ ๋ทฐ ์ธ์Šคํ„ด์Šค์˜ ๋ฐ์ดํ„ฐ์™€ ์ฆ‰์‹œ ๋™๊ธฐํ™”ํ•œ๋‹ค. ํ™”๋ฉด์— ์ž…๋ ฅ๋œ ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ์„œ๋ฒ„์— ๋ณด๋‚ด๊ฑฐ๋‚˜ watch์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. <input>, <select>, <textarea> ํƒœ๊ทธ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

<!DOCTYPE html>
<head>
  <title>Vue Template - Directives</title>
</head>
<body>
  <div id="app">
    <a v-if="flag">๋‘์ž‡ Vue.js</a>
    <ul>
      <li v-for="system in systems">{{ system }}</li>
    </ul>
    <p v-show="flag">๋‘์ž‡ Vue.js</p>
    <h5 v-bind:id="uid">๋ทฐ ์ž…๋ฌธ์„œ</h5>
    <button v-on:click="popupAlert()">๊ฒฝ๊ณ  ์ฐฝ ๋ฒ„ํŠผ</button>
  </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {
        flag: true,
        systems: ['android', 'ios', 'window'],
        uid: 10
      },
      methods: {
        popupAlert: function() {
          return alert('๊ฒฝ๊ณ  ์ฐฝ ํ‘œ์‹œ')
        }
      }
    })
  </script>
</body>
</html>

๋ฐ˜์‘ํ˜•

'JavaScript > Vue' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Vue.js] watch  (0) 2022.06.06
[Vue.js] computed ์†์„ฑ๊ณผ methods ์†์„ฑ์˜ ์ฐจ์ด์   (0) 2022.06.06
[Vue.js] Vue์—์„œ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹  (0) 2022.06.06
[Vue.js] v-bind  (0) 2022.06.06
Named View  (0) 2022.06.06

๋Œ“๊ธ€