์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง

Select
Nov 23, 2023
v-on์ด๋‚˜ @ ์œผ๋กœ ์‹คํ˜„~!
 
  • v-on์— ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์„ ์ง์ ‘ ๋ฐ”์ธ๋”ฉ ํ•˜๊ฑฐ๋‚˜ ์ธ๋ผ์ธ ๋ฉ”์†Œ๋“œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    • @์ด๋ฒคํŠธ์ด๋ฆ„=โ€๋ฉ”์†Œ๋“œ์ด๋ฆ„โ€ or @์ด๋ฒคํŠธ์ด๋ฆ„=โ€๋ฉ”์†Œ๋“œ์ด๋ฆ„()โ€
    • ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์„ ์ง์ ‘ ๋ฐ”์ธ๋”ฉํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— event ๊ฐ์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ๋„˜์–ด์˜จ๋‹ค
    • ์ธ๋ผ์ธ ๋ฉ”์†Œ๋“œ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ ์–ด์ค€ ๊ฒƒ๋งŒ ๋„˜์–ด์˜จ๋‹ค
      • ํ˜ธ์ถœํ•  ๋•Œ $event๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ์ด๋ฒคํŠธ ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค
      • ํ˜ธ์ถœํ•  ๋ฉ”์†Œ๋“œ๊ฐ€ ๋‘๊ฐ€์ง€ ์ด์ƒ์ผ ๋•Œ, ์„ธ๋ฏธ์ฝœ๋ก ์ด๋‚˜ ์‰ผํ‘œ(vue3๋ถ€ํ„ฐ)๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์—ฌ๋Ÿฌ๊ฐœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค
      •  

์ด๋ฒคํŠธ ์ˆ˜์‹์–ด

์ ‘๋ฏธ์‚ฌ๋กœ event์— ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค
  • .stop โ‡’ ==event.stopPropagation(), ๋ฒ„๋ธ”๋ง ๋ฐฉ์ง€
  • .capture โ‡’ == ์˜ต์…˜ {capture: true}, ์บก์ณ๋ง ํ—ˆ์šฉ (์ž์‹ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋ถ€๋ชจ ์š”์†Œ์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋‚ด๋ ค์˜ค๋ฉด์„œ ์‹คํ–‰๋จ)
  • .prevent โ‡’ == event.preventDefault()
  • .once โ‡’ ์ด๋ฒคํŠธ๋ฅผ ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰, ๊ฑธ์–ด๋‘” ์ ‘๋ฏธ์‚ฌ๋“ค๋„ ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ์œ ํšจํ•˜๋‹ค
  • .self โ‡’ event.currentTarget์™€ event.target๊ฐ€ ๊ฐ™์„ ๋•Œ๋งŒ ์ด๋ฒคํŠธ ์‹คํ–‰. ์ฆ‰, ์ž์‹์š”์†Œ์—๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ฑธ์ง€ ์•Š๋Š”๋‹ค
  • .passive โ‡’ == ์˜ต์…˜ {passive: true}, ์ด๋ฒคํŠธ ์‹คํ–‰๊ณผ ๋ฆฌ์Šค๋„ˆ ํ˜ธ์ถœ์„ ๋ณ„๊ฐœ๋กœ ๋‘ 
@click.prevent.stop
์ฒด์ด๋‹ ๋ฐฉ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ•œ๋ฒˆ์— ์‹คํ–‰ ๊ฐ€๋Šฅ
 

ํ‚ค ์ˆ˜์‹์–ด

  • ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ(keyup, keydown ๋“ฑ)์ผ ๋•Œ ํ‚ค ์ˆ˜์‹์–ด๋ฅผ ํ†ตํ•ด โ€˜event.keyโ€™๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์—ญ์‹œ ์ฒด์ด๋‹ ๋ฐฉ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ์ˆ˜์‹์–ด๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ, ํ•ด๋‹น ํ‚ค๋ฅผ ๋™์‹œ์— ๋ˆŒ๋Ÿฌ์•ผ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค
@keydown.enter @keydown.esc @keydown.ctrl @keyup.arrow-down
 

.exact ์ˆ˜์‹์–ด

ํ‚ค์ด๋ฒคํŠธ์˜ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ˆ˜์‹์–ด๋งŒ ๋ˆŒ๋ €์„ ๋•Œ ๋ฆฌ์Šค๋„ˆ ๋™์ž‘, ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ํ‚ค์™€ ๊ฐ™์ด ๋ˆ„๋ฅด๋ฉด ๋™์ž‘ํ•˜์ง€ ์•Š์Œ
<!-- Ctrl๊ณผ ํ•จ๊ป˜ Alt ๋˜๋Š” Shift๋ฅผ ๋ˆ„๋ฅธ ์ƒํƒœ์—์„œ๋„ ํด๋ฆญํ•˜๋ฉด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. --> <button @click.ctrl="onClick">A</button> <!-- ์˜ค์ง Ctrl๋งŒ ๋ˆ„๋ฅธ ์ƒํƒœ์—์„œ ํด๋ฆญํ•ด์•ผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. --> <button @click.ctrl.exact="onCtrlClick">A</button> <!-- ์‹œ์Šคํ…œ ์ž…๋ ฅํ‚ค๋ฅผ ๋ˆ„๋ฅด์ง€ ์•Š๊ณ  ํด๋ฆญํ•ด์•ผ์ง€๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. --> <button @click.exact="onClick">A</button>
 

๋งˆ์šฐ์Šค ๋ฒ„ํŠผ ์ˆ˜์‹์–ด

  • .left : ์™ผ์ชฝ ๋งˆ์šฐ์Šค
  • .right : ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค
  • .middle : ํœ