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 控制样式的显示和隐藏。

  • 一个侦听属性只能侦听一个变量,上述案例需要侦听用户名和密码,所以要写两个侦听属性,这两个侦听属性的逻辑代码是一样的。