[Vuejs] <input> ํ๊ทธ์ ์ ๋ ฅํ ์ /ํ value ๋ฐ์์ค๊ธฐ (Vuejs get old value when on change event)
input ๋ฐ์ค๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ์ ๋, ๊ธฐ์กด ๊ฐ๊ณผ ์๋กญ๊ฒ ์ ๋ ฅํ ๊ฐ์ ๋น๊ตํ์ฌ์ผํ๋ ๊ฒฝ์ฐ
์ฒ์์ ํ๋จ๊ณผ ๊ฐ์ด v-model์ ๊ฑธ์ด ๋ฐ์ดํฐ๋ฅผ ์ ํ ํ ํ, @input ์ด๋ฒคํธ๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์์ค๋ ค๊ณ ํ์ผ๋
๊ณ์ํด์ new ๊ฐ๋ง ๋ฐ์์ฌ ๋ฟ, old ๊ฐ์ ์ ๋ฌ๋์ง ์์๋ค.
๊ธฐ์กด์ฝ๋
<template v-for=(data, index) in table.data) :key=index>
<tr>
<td><input v-model="data.field1" @input="changeValue($event, data)"></input></td>
</tr>
</template>
ํด๊ฒฐ
v-model ๋์ , :value๋ก ๋ฐ์ดํฐ๋ฅผ ์ ํ ํด์ค ํ, @change ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด ๊ฐ์ ธ์ฌ ์ ์๋ค.
input ์๋ฆฌ๋จผํธ์์ v-model์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํ๋ฉฐ ์ ๋ ฅ ๋ด์ฉ์ ๋ํ ์๋ฐฉํฅ ๋ชจ๋ธ ๋ฐ์ธ๋ฉ์ด ๋ฐ๋ก ๊ฐ๋ฅํ์ง๋ง, :value(v-bind)์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ $event๋ฅผ ๊ฑธ์ด target value๋ฅผ ๊ฐ์ ธ์จ ํ, ๋ฐ์ดํฐ ๊ฐ์ ๋ฐ๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค.
v-model = v-bind:value + v-on:input
<template v-for=(data, index) in table.data) :key=index>
<tr>
<td><input v-model="data.field1" :value="data.field1" @change="changeValue(data, $event)"></input></td>
</tr>
</template>
๋์ ๊ฒฝ์ฐ old, new data๊ฐ ๋ค๋ฅผ ๋, ๊ธ์ ์์ ๋ณ๊ฒฝํด์ฃผ์ด์ผํ๋ค.
const changeValue = (item, event) => {
console.log(item.field1) //old data
console.log(event.target.value) //new data
item.field1 !== event.target.value ? (event.target.style.color = 'red') : (event.target.style.color = 'black');
}
+ ๋ฌธ์ ์
v-model๋ ํจ๊ป ๊ฑธ์ด๋ฒ๋ฆฌ๋ vue compile error๊ฐ ๋จ์ด์ง๋ค. v-model๋ ๊ฑธ์ด์ผํ๋๋ฐ ์ด๋กํ์ง? ํ