์ด๋ฒ ์ฑํฐ๋ Vuejs์ ์ด๋ฒคํธ ํธ๋ค๋ง์ ๋ํด ๋ค๋ฃจ์์ต๋๋ค.
โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
v-on
์ @
๊ธฐํธ๋ก ์ค์ฌ์ ์ฌ์ฉํ ์ ์๋ค.
๋ฉ์๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ธ๋ผ์ธ ๋ฉ์๋ ํธ๋ค๋ฌ
ํธ์ถํ๊ณ ์ ํ๋ ๋ฉ์๋ ์ด๋ฆ์ ๋ฐ์ ์ด๋ฒคํธ๋ฅผ ํธ์ถํ๊ฑฐ๋ ์ธ๋ผ์ธ JS ๊ตฌ๋ฌธ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
<!-- vue3 ์์ -->
<div id="event-with-method">
<button @click="greet">Greet</button>
<button @click="say('hi')">Say hi</button>
</div>
Vue.createApp({
data() {
return {
name: 'Vue.js'
}
},
methods: {
greet(event) {
if (event) {
alert(event.target.tagName)
}
},
say(message) {
alert(message)
}
}
}).mount('#event-with-method')
๋ณตํฉ ์ด๋ฒคํธ ํธ๋ค๋ฌ
,
๋ก ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฌ๊ฐ ์ง์ ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<!-- vue3 ์์ -->
<button @click="one($event), two($event)">
Submit
</button>
์ด๋ฒคํธ ์์์ด
์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์์ event.preventDefault()
๋๋ event.stopPropagation()
๋ฅผ ํธ์ถํ๋ ์ผ์ ๋น๋ฒํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ v-on
์ด๋ฒคํธ์ ์ด๋ฒคํธ ์์์ด๋ฅผ ์ ๊ณตํ๋ค.
<!-- vue3 ์์ -->
<!-- ํด๋ฆญ ์ด๋ฒคํธ ์ ํ๊ฐ ์ค๋จ๋์์ต๋๋ค. -->
<a @click.stop="doThis"></a>
<!-- ์ ์ถ ์ด๋ฒคํธ๊ฐ ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์์ต๋๋ค. -->
<form @submit.prevent="onSubmit"></form>
<!-- ์์ ์๋ ์ฒด์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค. -->
<a @click.stop.prevent="doThat"></a>
<!-- ๋จ์ํ ์์์ด๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. -->
<form @submit.prevent></form>
<!-- ์บก์ฒ ๋ชจ๋๋ฅผ ์ฌ์ฉํ ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.-->
<!--์ฆ, ๋ด๋ถ ์๋ฆฌ๋จผํธ๋ฅผ ๋์์ผ๋ก ํ๋ ์ด๋ฒคํธ๊ฐ ํด๋น ์๋ฆฌ๋จผํธ์์ ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ์ฌ๊ธฐ์ ์ฒ๋ฆฌํฉ๋๋ค. -->
<div @click.capture="doThis">...</div>
<!-- event.target์ด ์๋ฆฌ๋จผํธ ์์ฒด์ธ ๊ฒฝ์ฐ์๋ง ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.-->
<!-- ์์ ์๋ฆฌ๋จผํธ์์๋ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค.-->
<div @click.self="doThat">...</div>
ํค ์์์ด
ํค๋ณด๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<!-- ํค๊ฐ 'Enter'์ผ๋๋ง `vm.submit()`์ ํธ์ถํ ์ ์์ต๋๋ค.-->
<input @keyup.enter="submit" />
<input @keyup.page-down="onPageDown" />
<!-- ์ํธ + ์ํฐ -->
<input @keyup.alt.enter="clear" />
.exact
์์์ด
๋ค๋ฅธ ์์คํ
์์์ด์ ์กฐํฉํด ๊ทธ ํธ๋ค๋ฌ๊ฐ ์คํ๋๊ธฐ ์ํด ์ ํํ ์กฐํฉ์ด ๋๋ฌ์ผํ๋ ๊ฒ์ ์๊ตฌํ๋ค.
<!-- ์๋์ฝ๋๋ Alt ๋๋ Shift์ ํจ๊ป ๋๋ ์ ๋๋ ์คํ๋ฉ๋๋ค.-->
<button @click.ctrl="onClick">A</button>
<!-- ์๋์ฝ๋๋ Ctrlํค๋ง ๋๋ ค์ ธ ์์ ๋ ์คํ๋ฉ๋๋ค.-->
<button @click.ctrl.exact="onCtrlClick">A</button>
<!-- ์๋ ์ฝ๋๋ ์์คํ
ํค๊ฐ ๋๋ฆฌ์ง ์์ ์ํ์ธ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.-->
<button @click.exact="onClick">A</button>
์ ๋ง ์ค์ํ ์ง๋ฌธ์ด๋ค.
์ด ์ด์ ๋ ์ฐ์ html ํ
ํ๋ฆฟ์ ๊ฐ๋จํ ํด js ์์์ ํจ์๋ฅผ ์ฐพ๊ธฐ๊ฐ ํธํ๊ธฐ ๋๋ฌธ์ด๊ณ ํ
์คํธ๊ฐ ํธํด์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ง๋ง์ผ๋ก ViewModel์ด ํ๊ธฐ๋๋ฉด ๋ชจ๋ ์ด๋ฒคํธ ๋ฆฌ์คํฐ๊ฐ ์๋์ผ๋ก ์ ๊ฑฐ๋๊ธฐ ๋๋ฌธ์ด๋ค!
๋ฆฌ์คํธ ๋ ๋๋ง์ ๋ฐฐ์ธ ๋ v-for
๊ณผ v-if
๋ฅผ ํจ๊ป ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค. ์๋
vue๋ฅผ ์ ํ ๋ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์์ง๋ง ์
์๋๋์ง๋ ์ดํด๋ณด์ง ์์์๋ค. ๋์ผํ ๋
ธ๋์ ์์ผ๋ฉด v-if๋ v-for๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ v-if ์กฐ๊ฑด์ v-for ๋ฒ์์ ๋ณ์์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ, ์ด ๋ถ๋ถ์ ๊นจ๋ซ๊ฒ ๋์๋ค.
ํญ์ ๊ณต๋ถ๋ฅผ ํ ๋ ๊ทธ๋ ๊ตฌ๋ ํ๊ณ ๋์ด๊ฐ์ง ๋ง๊ณ ์ ์ด๋ฐ ๊ฐ๋ ์ด ๋์๋์ง, ์์ธ์ ๋ํด์ ์ดํดํ๊ณ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด์๋ ์๋ฉด์ ๊ณต๋ถํด์ผ๊ฒ ๋ค.
๋ญ๋ ์ง ์๋ก์ด ๊ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ ์ฆ๊ฒ๋ค๐๐ป