watch侦听属性
侦听属性:用于侦听 data 中数据的变化,只要 data 中数据发生改变,就会触发 watch 侦听属性,代码如下。
<template>
<div class="hello">
<h1>侦听属性</h1>
//3.使用双向数据绑定修改num变量
<input type="text" v-model="num" />
</div>
</template>
<script>
export default {
name: "HelloWorld",
data() {
return {
//1.声明num变量
num: 10
};
},
watch: {
//2.要侦听num数据,侦听属性的方法名就是num()
//侦听属性的方法不能随意命名
num() {
console.log("num数值发生改变");
}
}
};
</script>
-
watch属性和data属性、methods属性平级。
-
侦听属性的方法不能随意命名,方法名就是侦听的变量名。
-
当数据发生改变时,触发侦听方法。
输入用户名和密码后即可改变按钮样式。
下面使用侦听属性实现7.6节中案例的效果,因为侦听属性没有返回值,所以其实现方法与计算属性相比有所不用,具体代码如下。
<template>
<div class="hello">
<input type="text" v-model="user" />
<input type="text" v-model="password" />
<input type="button" value="单击" :class="{active: isactive}" />
</div>
</template>
<script>
export default {
name: "HelloWorld",
data() {
return {
user: "",
password: "",
isactive: false // 1. 定义 isactive 变量,控制按钮样式的显示和隐藏
};
},
watch: {
user() { // 3. 监听 user 的改变
if (this.user == "" || this.password == "") {
this.isactive = false;
} else {
this.isactive = true;
}
},
password() { // 4. 监听 password 的改变
if (this.user == "" || this.password == "") {
this.isactive = false;
} else {
this.isactive = true;
}
}
}
};
</script>
<style scoped>
.active {
background: red;
}
</style>
代码解析如下。
-
因为侦听属性没有返回值,所以在 data 中定义 isactive 控制样式的显示和隐藏。
-
一个侦听属性只能侦听一个变量,上述案例需要侦听用户名和密码,所以要写两个侦听属性,这两个侦听属性的逻辑代码是一样的。