vue之watch监听属性

 

1、组件实例属性watch对应一个对象;键是需要观察的表达式,值是对应回调函数;值也可以是方法名,或者包含选项的对象;组件实例将会在实例化时调用 $watch().

复制代码
<template>
  <input type="checkbox" v-model="item.checked" @change="handleChange" />
</template>
<script>
export default {
  model: {
    prop: "item", // 自定义属性名
    event: "change" // 自定义事件名
  },
  props: {
    item: { type: Object, default: () => ({ checked: false }) }
  },
  watch: {
    "item.checked"(val, oldVal) {
      // 这里可以在值变化时做些什么
    }
  },
  methods: {
    handleChange(data) {
      this.$emit("change", data);
    }
  }
};
</script>
复制代码

 

2、立即触发:通过上面的代码,已经可以在值发生变化的时候触发监听,但是如果想在组件初始化时就像触发监听,我们还需要在created或者mounted生命周期钩子里面做事情。不过,现在可以不用这样写了,通过配置watch的立即触发属性,就可以满足需求了。

复制代码
watch: {
    // 在值发生变化之后,重新加载数据
    "item.checked": {
    // 通过handler来监听属性变化, 初次调用 newValue为""空字符串, oldValue为 undefined
      handler(newValue, oldValue) {
        if (newValue !== oldValue) {
          // 这里可以在值变化时做些什么
        }
      },
      // 配置立即执行属性
      immediate: true
    }
},
复制代码

 

3、深度监听:监听对象的每一个值得变化

复制代码
watch: {
    // 在值发生变化之后,重新加载数据
    item: {
    // 通过handler来监听属性变化, 初次调用 newValue为""空字符串, oldValue为 undefined
      handler(newValue, oldValue) {
        if (newValue !== oldValue) {
          // 这里可以在值变化时做些什么
        }
      },
      // 配置立即执行属性
      immediate: true,
      // 通过指定deep属性为true, watch会监听对象里面每一个值的变化
      deep: true
    }
  },
复制代码

 

4、随时监听,随时取消,了解一下$watch

复制代码
// 随时监听,随时取消,了解一下$watch
const unwatch = this.$watch(
'item',
() => {
    console.log('数据发生了变化')
},
{ deep: true }
);
// 取消简单
unwatch()
复制代码

 

posted @   NovaKnight  阅读(281)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示