๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปWEB FrontEnd/ํ”„๋ ˆ์ž„์›Œํฌ Vue

์žฌ์‚ฌ์šฉ & ์ปดํฌ์ง€์…˜(2) - ์‚ฌ์šฉ์ž ์ง€์ • ๋””๋ ‰ํ‹ฐ๋ธŒ

์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ

v3.vuejs-korea.org/ko-kr/guide/custom-directive.html

 


1. ์‚ฌ์šฉ์ž ์ง€์ • ๋””๋ ‰ํ‹ฐ๋ธŒ

Vue๋Š” ์ฝ”์–ด์— ํฌํ•จ๋œ ๊ธฐ๋ณธ ๋””๋ ‰ํ‹ฐ๋ธŒ ์„ธํŠธ ์™ธ์—๋„ ์‚ฌ์šฉ์ž ์ •์˜ ๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

1) ๋””๋ ‰ํ‹ฐ๋ธŒ ๋“ฑ๋ก ๋ฐฉ๋ฒ•

์‚ฌ์šฉ์ž ์ง€์ • ๋””๋ ‰ํ‹ฐ๋ธŒ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  1. ์ „์—ญ์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. ๋กœ์ปฌ ๊ฒ€ํฌ๋„ŒํŠธ์— ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ• 

 

์ „์—ญ ์„ ์–ธ

Vue ์ธ์Šคํ„ด์Šค ์„ ์–ธํ•˜๊ธฐ ์ „์— Vue.directive ์ „์—ญ ๋“ฑ๋ก์„ ์‹œ์ผœ์ค€๋‹ค.

// ์ „์—ญ ์‚ฌ์šฉ์ž ์ •์˜ ๋””๋ ‰ํ‹ฐ๋ธŒ v-focus ๋“ฑ๋ก
Vue.directive('focus', {
  // ๋ฐ”์ธ๋”ฉ ๋œ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ DOM์— ์‚ฝ์ž…๋˜์—ˆ์„ ๋•Œ...
  inserted: function (el) {
    // ์—˜๋ฆฌ๋จผํŠธ์— ํฌ์ปค์Šค๋ฅผ ์ค๋‹ˆ๋‹ค
    el.focus()
  }
})

 

์ง€์—ญ ์„ ์–ธ

์ง€์‹œ์–ด๋ฅผ ๋กœ์ปฌ๋กœ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๋Š” directives ์˜ต์…˜์„ ํ—ˆ์šฉํ•˜๋ฉด ๋œ๋‹ค.

directives: {
  focus: {
    // ๋””๋ ‰ํ‹ฐ๋ธŒ ์ •์˜
    inserted: function (el) {
      el.focus()
    }
  }
}

 

2) ๋“ฑ๋กํ•œ ๋””๋ ‰ํ‹ฐ๋ธŒ ์‚ฌ์šฉ

ํ…œํ”Œ๋ฆฟ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ชจ๋“  ์š”์†Œ์—์„œ ์ƒˆ๋กญ๊ฒŒ ์ง€์ •ํ•ด์ค€ ๋””๋ ‰ํ‹ฐ๋ธŒ์ธ v-focus ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

<input v-focus>

 

2. ํ›… ํ•จ์ˆ˜

๋””๋ ‰ํ‹ฐ๋ธŒ ์ •์˜ ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ›… ํ•จ์ˆ˜(์„ ํƒ์‚ฌํ•ญ)๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

ํ›… ํ•จ์ˆ˜ ์„ค๋ช…
beforeMount ๋””๋ ‰ํ‹ฐ๋ธŒ๊ฐ€ ์ฒ˜์Œ ์—˜๋ฆฌ๋จผํŠธ์— ๋ฐ”์ธ๋”ฉ ๋˜๊ณ  ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋˜๊ธฐ์ „์— ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๊ณณ์—์„œ ํ•œ๋ฒˆ ์‹คํ–‰๋˜๋Š” ์ดˆ๊ธฐ ์„ธํŒ…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
mounted ๋ฐ”์ธ๋”ฉ๋œ ์š”์†Œ์˜ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋ ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
beforeUpdate ํฌํ•จ๋œ ์ปดํฌ๋„ŒํŠธ์˜ VNode๊ฐ€ ๊ฐฑ์‹ ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ์ด ๋ฉ๋‹ˆ๋‹ค.
updated ํฌํ•จ๋œ ์ปดํฌ๋„ŒํŠธ์˜ VNode ๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ์˜ ์ž์‹๋“ค์˜ VNodes๋“ค์ด ์—…๋ฐ์ดํŠธ ๋˜๊ณ  ๋‚œ๋’ค์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
beforeUnmount ๋ฐ”์ธ๋”ฉ๋œ ์š”์†Œ์˜ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํ‹ฐ๋“œ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
unmounted ์š”์†Œ๋กœ๋ถ€ํ„ฐ ๋””๋ ‰ํ‹ฐ๋ธŒ๊ฐ€ ์–ธ๋ฐ”์ธ๋“œ ๋ ๋•Œ ๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ
๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋ ๋•Œ, ํ•œ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

Custom Directive API์—์„œ ์ด๋Ÿฌํ•œ ํ›…๋“ค์— ์ „๋‹ฌ๋œ ์ธ์ž๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.