watch侦听器

37 阅读1分钟

watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。

基础使用

data: {
  username: 'admin'
},

// 所有的侦听器,都应该被定义到 watch 节点下
watch: {
// 侦听器本质上是一个函数,要监视哪个数据的变化,就把数据名作为方法名即可
// 新值在前,旧值在后
  username(newVal, oldVal) {
    console.log(newVal, oldVal)
  }
}

immediate 选项

默认情况下,组件在初次加载完毕后不会调用 watch 侦听器。如果想让 watch 侦听器立即被调用,则需要使用 immediate 选项。

data: {
  username: 'admin'
},

watch: {
  username: {
      // handler是固定写法,表示当username的值发生变化时,自动调用handler函数(侦听器的处理函数)
      handler(newVal, oldVal) {
        console.log(newVal, oldVal)
      },
      // immediate 选项的默认值是 false
      // immediate 的作用是:控制侦听器是否自动触发一次!
      // 表示页面初次渲染好之后,就立即出发当前的watch侦听器
      immediate: true
  }
}

deep 选项

如果 watch 侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到。此时需要使用 deep 选项

data: {
// 用户的信息对象
  info: {
    username: 'admin',
    address: {
      city: '北京'
    }
  }
},
// 所有的侦听器,都应该被定义到 watch 节点下
watch: {
  info: {
    handler (newVal) {
      console.log(newVal)
    },
      // 开启深度监听,只要对象中任何一个属性变化了,都会触发“对象的侦听器”
      deep: true
  }
  // // 如果要侦听的是对象的子属性的变化,则必须包裹一层单引号
  // 'info.username' (newVal) {
  //    console.log(newVal)
  //  }
}