Vue μ v-model μ λν΄μ μμ보μ
π v-model μ΄λ?
v-model
μ Vue
μμ μλ°©ν₯ λ°μΈλ©μ μ¬μ©ν μ μλ λλ ν°λΈμ
λλ€.
κΈ°λ³Έμ μΌλ‘ form
μμλ€μ μ¬μ©ν μ μμΌλ©° μ΄λ₯Ό ν΅ν΄ νμ¬ μ
λ ₯λ form
μμ κ°μ
λκΈ°μ μΌλ‘ μμ½κ² λ€λ£° μ μλλ‘ ν΄μ€λλ€.
π v-model μ μ¬μ© μμ
<template>
<div>
<input type="text" v-model="name" />
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
@Component({
name: 'Index',
})
export default class Index extends Vue {
private name = ''
}
</script>
π v-model κ³Ό ν¨κ» μ¬μ©ν μ μλ μμμ΄
v-model
κ³Ό ν¨κ» μ¬μ©ν μ μλ μμμ΄(modifier
) κ° 3κ°μ§ μ‘΄μ¬ν©λλ€.
κ°κ°μ μμμ΄μ λν΄μ κ°λ¨ν μμμ ν¨κ» μ΄ν΄λ³΄λλ‘ νκ² μ΅λλ€.
.lazy
<template>
<div>
<input type="text" v-model.lazy="firstName">
<input type="text" v-model="lastName">
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
@Component({
name: 'Index',
})
export default class Index extends Vue {
private firstName = ''
private lastName = ''
}
</script>
.lazy
μμμ΄λ₯Ό μ¬μ©ν κ²½μ° change
μ΄λ²€νΈκ° λ°μν λ κ°μ λκΈ°νκ° μ΄λ£¨μ΄μ§λλ‘ λ³κ²½ν μ μμ΅λλ€.
μ μμ μ κ²½μ° μ²«λ²μ§Έ input
μμμμ focus out
λ κ²½μ°μ κ°μ΄ λκΈ°νλλ κ²μ νμΈν μ μμ΅λλ€.
.number
<template>
<div>
<input type="number" v-model.number="price" />
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
@Component({
name: 'Index',
})
export default class Index extends Vue {
private price = 0
}
</script>
input
μμμ type=number
λ₯Ό μ¬μ©νλλΌλ λ°μΈλ©λ κ°μ λ¬Έμμ΄ νμ
μΌλ‘ λ³νλ©λλ€.
.number
μμμ΄λ₯Ό μ¬μ©νλ©΄ λ°μΈλ©λ κ°μ μ«μνμΌλ‘ λ³ννμ¬ λκΈ°νν©λλ€.
λλ¬Έμ μ«μν κ°μ μ λ ₯ λ°μμΌ ν λ λ³λλ‘ νλ³ν μ½λλ₯Ό μΆκ°ν΄μ£Όμ§ μμλ λλ€λ μ₯μ μ΄ μμ΅λλ€.
λ§μ½ μ ν¨νμ§ μμ μ«μκ°μ΄ μ λ ₯λλ©΄ λΉλ¬Έμμ΄μ΄ ν λΉλ©λλ€.
.trim
<input v-model.trim="message" />
.trim
μμμ΄λ₯Ό μ¬μ©νλ©΄ μλμΌλ‘ trim
(λ¬Έμμ΄ μ λ 곡백 μ κ±°) μ μννμ¬ κ°μ λ°μΈλ©ν©λλ€.
π μ»΄ν¬λνΈμ v-model μ¬μ©νκΈ°
μ¬μ©μκ° μ μν μ»΄ν¬λνΈμ v-model
μ μ¬μ©νκΈ° μν΄μλ
v-model
μ λμ λ°©μμ λν΄μ μ΄ν΄λ³Ό νμκ° μμ΅λλ€.
v-model
μ κΈ°λ³Έμ μΌλ‘ input
μ΄λ²€νΈμ value
μμ±κ°μ μ΄μ©ν΄μ ꡬνλ©λλ€.
λ°λΌμ λ€μκ³Ό κ°μ v-model
μ μΈμ μ¬μ€..
<input v-model="message" />
λ€μκ³Ό λμΌν μ½λμ λλ€.
<input v-bind:value="message" v-on:input="value = $event.target.value">
λ°λΌμ μ»΄ν¬λνΈμ v-model
μ μ¬μ©νκΈ° μν΄μλ κ°μ λκΈ°νμ μ¬μ©λ event
μ
κ°μ λκΈ°νν value
λ₯Ό μ§μ νλ©΄ λ©λλ€.
Vue
μμλ μ΄λ₯Ό μν΄ model
μμ±μ μ 곡νλ©° vue-property-decorator
λ₯Ό μ¬μ©ν κ²½μ°
@Model
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νλ©΄ λ©λλ€.
π @Model λ°μ½λ μ΄ν° μ¬μ© μμ
vue-property-decorator
λ‘ μ±μ κ°λ°μ€μ΄λΌλ©΄
@Model
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©ν΄μ v-model
μ μ μν μ μμ΅λλ€.
List
μ»΄ν¬λνΈλ₯Ό μμ±νκ³ κ°κ°μ 리μ€νΈ νλͺ©μ μ΄λ²€νΈλ₯Ό λΆμ¬νμ¬
νμ¬ μ νλ μ΄λ²€νΈλ₯Ό v-model
λ‘ μΆμ ν μ μλλ‘ νλ κ°λ¨ν μμ μ
λλ€.
// List.vue
<template>
<ul>
<li @click="onClick(0)">0</li>
<li @click="onClick(1)">1</li>
<li @click="onClick(2)">2</li>
</ul>
</template>
<script lang="ts">
import { Component, Vue, Model, Emit } from 'vue-property-decorator'
@Component({
name: 'List'
})
export default class List extends Vue {
@Model('select', { type: Number }) readonly value!: number;
@Emit('select')
public onClick(idx: number) {
return idx
}
}
</script>
// Index.vue
<template>
<list v-model="selectedIndex" />
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
import List from '../components/List.vue'
@Component({
name: 'Index',
components: { List }
})
export default class Index extends Vue {
private selectedIndex = 0
}
</script>
π μ°Έκ³ μλ£
v-modelμ λμ μ리μ νμ© λ°©λ²
Everything You Need to Know About Vue v-model
'π archive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Vue.js] v-deep μμ±μ λν΄μ (0) | 2022.02.20 |
---|---|
[Vue.js] mixin μ½λ μ€νμΌ κ°μ΄λ (0) | 2022.02.20 |
[Vue.js] Vue μμ λΉλκΈ° μμ²μ μΈμ νλ κ²μ΄ μ’μκΉ? (0) | 2022.02.20 |
Vue.js ν΄λμ€μ μ€νμΌ λ°μΈλ© μ μ©νκΈ° (1) | 2021.03.02 |
Vue.js μμ λ°μν(Reactivity)μ λ€λ£¨λ λ°©λ² (0) | 2021.03.02 |
π¬ λκΈ