vue中如何判断表单的内容是否发生了改变,并提示用户数据已修改是否保存
<div id="app">
<input type="text" v-model="v1"/>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
v1: '2'
}
},
watch: {
v1: function () {
alert('数据已经修改,是否保存')
}
}
})
可以使用watch属性来监听数据的变化
如果这样不行 试下下面这个呢
<div id="app">
<input type="text" v-model="v1.key1" name="dj" @change="handlerChange"/>
<input type="text" v-model="v1.key2" name="dj1" @change="handlerChange"/>
<input type="text" v-model="v1.key3" name="dj2" @change="handlerChange"/>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
v1: {
key1: '1',
key2: '1',
key3: '1'
}
}
},
methods: {
handlerChange(e) {
alert(e.target.name + "数据发送变化" + e.target.value)
}
}
})
</script>
data(){
return {
editForm: {}, //绑定在表单上,用于数据渲染
prevForm: {}, //保存原本的数据,通过渲染的数据的改变与原本的数据进行对比
editFormChanged: false, // 是否修改标识
}
},
watch: {
// watch监听 判断是否修改
editForm: {
handler (val, oldVal) {
for (let i in this.editForm) {
if (val[i] != this.prevForm[i]) {
this.editFormChanged = true;
break;
} else {
this.editFormChanged = false;
}
}
},
deep: true
}
},
至于prevForm的赋值,在给editForm赋值的时候,给prevForm同时赋值即可。
v-model 然后 watch
比如
<template>
<input name='a' v-model="a" type="input" />
</template>
<script>
export default {
data(){
return {a:0,b:0};
},
watch:{
a(oldv,newv){
//提示是否要保存
let bool = true;
this.a = bool ? newv : oldv;
}
}
};
</script>
把你的表单元素的v-model放进一个数组中,用watch进行深度监听
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="box">
<div id="app">
<input type="text" v-model="arr.key1" />
<input type="text" v-model="arr.key2" />
<input type="text" v-model="arr.key3" />
<input type="text" v-model="arr.key4.val" />
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>
var vm = new Vue({
el:"#box",
data:{
arr:{
key1:1,
key2:2,
key3:3,
key4:{
val:4
}
}
},
methods:{
},
mounted () {
},
watch: {
arr:{
handler:function(obj){
console.log(obj);
},
deep:true
}
}
});
</script>
</body>
</html>
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.3k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
转成字符串后 比对修改后的字符串是否相等