watch的作用
在Vue中,我们可以通过watch配置项来监测数据的变化,以便处理一些业务。
watch监测数据
在watch看来,数据可以分为简单数据与多级的数据(对象)
简单数据: 例如 msg: ‘hello’
多级的数据: 例如 number: { a:0, b:1}
watch监测简单数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>watch的使用</title>
<script type="text/javascript" src="./vue.js"></script>
</head>
<body>
<div id="root">
<h2>I am {{ isOK ? "fine" : "not fine"}} !</h2>
<button @click="changeOK">changeOK</button>
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false //阻止生产提示。
const vm = new Vue({
el:'#root',
data:{
isOK: true,
person: {
name: 'mmm',
age: 18
}
},
methods: {
changeOK() {
this.isOK = !this.isOK
}
},
watch: {
// 监测isOK的变化
isOK(newValue,oldValue) {
console.log("isOK变了","oldValue=",oldValue," newValue=",newValue);
}
}
})
</script>
</html>
效果:
watch监测多级数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>watch的使用</title>
<script type="text/javascript" src="./vue.js"></script>
</head>
<body>
<div id="root">
<h2>我的名字是{{person.name}}</h2>
<h2>我今年{{person.age}}岁</h2>
<button @click="changeName">changeName</button>
<button @click="beOlder">beOlder</button>
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false //阻止生产提示。
const vm = new Vue({
el:'#root',
data:{
person: {
name: 'mmm',
age: 18
}
},
methods: {
changeName() {
this.person.name = 'nnn'
},
beOlder() {
this.person.age ++
}
},
watch: {
/*
//这样监视的是numbers的地址,虽然numbers里面属性改变,但是numbers地址未改变,监测不到变化
person() {
console.log("person变化了");
}
*/
person: {
//immediate: true, //初始化时执行以下 handler()
deep: true, //配置 deep 可以监视到 numbers 内部改变
handler() {
console.log("person变化了");
}
}
}
})
</script>
</html>
效果:
总结
watch配置项的完整写法:
被监测数据: {
immediate: true, //初始化时执行以下 handler()
deep: true, //配置 deep 可以监视到数据内部改变
handler() { //数据变化时执行
console.log("变化了");
}
}
当监测的配置只有handler时可以简写:
被监测数据() {
console.log("变化了");
}