V-Model λμ μ리μ νμ© λ°©λ²
2022. 6. 1. 22:26γFront-End μμ μ€/κΈ°ν μ°Έκ³ μλ£
728x90
λ°μν
μ°Έκ³ μλ£ : https://joshua1988.github.io/web-development/vuejs/v-model-usage/
π V-modelμ΄λ?
π½ μμ±
곡μ λ¬Έμμ μλ΄λ v-model μμ±μ μ¬μ©λ²μ μλμ κ°μμ.
<input v-model="inputText">
new Vue({
data: {
inputText: ''
}
})
μ΄λ κ² μ΄μ©μμ μ λ ₯μ λ°λ UI μμλ€μ v-modelμ΄λΌλ μμ±μ μ¬μ©νλ©΄ μ λ ₯ κ°μ΄ μλμΌλ‘ λ·° Data μμ±μ μ°κ²°λκ² λλ κ²μ΄μμ.
π½ v-model λμ λ°©μ
v-model μμ±μ v-bindμ v-onμ κΈ°λ₯μ μ‘°ν©μΌλ‘ λμνκ² λμ.
λ§€λ² κ°λ°μκ° νλνλ v-bindμ v-on μμ±μ λ€ μ§μ ν΄ μ£Όμ§ μμλ μ’ λ νΈνκ² κ°λ°ν μ μκ² κ³ μλ λ¬Έλ²μΈ κ²μ΄μμ. μμμ μ΄ν΄λ³Έ μ½λλ₯Ό μλμ κ°μ΄ λ³κ²½ν΄λ λμνκ² λ©λλ€.
<input v-bind:value="inputText" v-on:input="updateInput">
new Vue({
data: {
inputText: ''
},
methods: {
updateInput: function(event) {
var updatedText = event.target.value;
this.inputText = updatedText;
}
}
})
μ¬κΈ°μ μ°λ¦¬λ 3κ°μ§λ₯Ό μ΄ν΄νκ³ λμ΄κ°μΌ νλ κ²μ΄μμ.
β v-bind μμ±μ λ·° μΈμ€ν΄μ€μ λ°μ΄ν° μμ±μ HTML μμμ μ°κ²°.
β v-on μμ±μ ν΄λΉ HTML μμμ Eventλ₯Ό λ·° μΈμ€ν΄μ€ Logicκ³Ό μ°κ²°.
β μ¬μ©μ Eventμ μν΄ μ€νλ λ·° Method ν¨μμ 첫λ²μ§Έ μΈμμλ ν΄λΉ Eventκ° λ€μ΄μ¨λ€.
π‘ μ°Έκ³ μ¬ν
HTML μ λ ₯ μμμ μ’ λ₯μ λ°λΌ `v-model` μμ±μ΄ λ€μκ³Ό κ°μ΄ ꡬμ±.
1) input Tagμλ `value / input`
2) checkbox Tagμλ `checked / change`
3) select Tagμλ `value / change`
λ°μν
π¦ v-modelμ΄ λ§λ₯ ν΄κ²°μ¬?
λΉ λ₯΄κ² κΈ°λ₯μ ꡬννκ³ νλ‘ν νμ΄νμ ν΄ λκ° λλ v-modelμ μ¬μ©ν΄λ μ’μΌλ, νμ¬ μμ μμ IME μ λ ₯(νκΈ, μΌλ³Έμ΄, μ€κ΅μ΄μ λν΄μ μλμ κ°μ νκ³κ° μμ΅λλ€.
μ νλ©΄μ 보면 νκΈ μ
λ ₯μ κ²½μ° ν κΈμμ λν μ
λ ₯μ΄ λλμΌ inputText Dataκ° Input Boxμ Text κ°κ³Ό λκΈ°ν λλ κ²μ λ³Ό μ μμ΄μ.
μμ κ°μ λ¬Έμ λ‘ μΈν΄ λ·° 곡μ λ¬Έμμμλ νκΈ μ
λ ₯μ λ€λ£° λλ v-bind:valueμ v-on:inputμ μ§μ μ°κ²°ν΄μ μ΄μ©νλ κ²μ κΆκ³ νκ³ μλ΅λλ€.
π¦ v-modelμ μ΄μ©ν΄μ νκΈ μ²λ¦¬νλ λ°©λ²
νκΈ μ
λ ₯μ μ²λ¦¬ν λ, v-model λμ μ§μ Eventμ κ°μ μ‘°ν©ν΄μ Binding νλ κ²μ κ°λ°μκ° μ’μνλ λ°©λ²μ μλ κ²μ΄μμ. μ΄λ΄ λ μλμ κ°μ΄ Input Componentλ₯Ό λ³λμ Componentλ‘ λΆλ¦¬νλ©΄ v-modelλ‘ νΈνκ² μ²λ¦¬ν μ μμ΄μ.
<!-- BaseInput.vue - μ±κΈ νμΌ μ»΄ν¬λνΈ κ΅¬μ‘°-->
<template>
<input v-bind:value="value" v-on:input="updateInput">
</template>
<script>
export default {
props: ['value'],
methods: {
updateInput: function(event) {
this.$emit('input', event.target.value);
}
}
}
</script>
μμ Codeλ μ΄λ»κ² λμμ νλ κ²μΌκΉμ?
β BaseInput Componentμ μμ Componentμμ propsλ‘ λ°μ valueλ₯Ό input Tag κ°μΌλ‘ μ°κ²°.
β Input Tagμ κ°μ΄ μ
λ ₯ λλ©΄ Input Tagμμ input Eventκ° λ°μνκ³ , updateInput Method μ€ν.
β updateInput Methodμμ Input Tagμ μ
λ ₯λ κ°μ μμ Component input Envetλ‘ μ λ¬.
μ΄μ μμ μ»΄ν¬λνΈμμ μλμ κ°μ΄ μ΄μ©ν μ μμ΄μ.
<!-- App.vue - μ±κΈ νμΌ μ»΄ν¬λνΈ κ΅¬μ‘° -->
<template>
<div>
<base-input v-model="inputText"></base-input>
</div>
</template>
<script>
import BaseInput from './BaseInput.vue';
export default {
components: {
'base-input': BaseInput
},
data: function() {
return {
inputText: ''
}
}
}
</script>
μ¬κΈ°μ μ°λ¦¬κ° μ£Όλͺ©ν΄μΌ ν λΆλΆμ μ¬μ°μ΄ μ»΄ν¬λνΈμμ μ μν Data κ°μ νμ μ»΄ν¬λνΈλ‘ λ΄λ €λ³΄λ΄λ λΆλΆμΈ κ²μ΄μμ.
νμμ μ¬μ©νλ Props μμ± λμ v-modelμ΄ μ¬μ©λμλλ°, μ΄λ―Έ μ v-model λμ λ°©μμμ v-model μμ±μ v-dind:valueμ v-on:inputμ μ‘°ν©ν΄μ λ§λ€μλ€λ κ²μ κ³΅λΆ νκΈ° λλ¬Έμ v-model μμ±μ μ°κ²°ν κ°μ΄ νμ μ»΄ν¬λνΈμ valueλΌλ Props μμ±μΌλ‘ λ΄λ € κ°λ€λ μ¬μ€μ μ μ μμ΄μ.
728x90
λ°μν
'Front-End μμ μ€ > κΈ°ν μ°Έκ³ μλ£' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[FrontEnd] HMR(Hot Module Replacement) (0) | 2022.05.22 |
---|---|
[Vue.js & Nuxt.js]Vuexλ? (0) | 2022.04.01 |
[FrontEnd] html Tag μ 리 (0) | 2022.03.14 |
[CSS] background, background-size (0) | 2022.03.14 |
[CSS] Color μμ± (0) | 2022.03.13 |