当前位置: 首页 > backend >正文

vue的监听属性watch的详解

文章目录

  • 1. 监听属性 watch
  • 2. 常规用法
  • 3. 监听对象和route变化
  • 4. 使用场景

1. 监听属性 watch

watch 是一个对象,键是需要观察的表达式,用于观察 Vue 实例上的一个表达式或者一个函数计算结果的变化。回调函数的参数是新值和旧值。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个 property。

2. 常规用法

watch 监听有两个形参,第一个是新值,第二个是旧值。如下例子:使用 watch 监听了 total 的值,当 total 的值改变时,控制台会打印出旧值和新值。

<template><div class="home_box"><h1>{{ total }}</h1><button @click="handleAddTotal">增加</button></div>
</template><script>
export default {name: 'Home',watch: {total(newValue, oldValue) {console.log('旧值:', oldValue)console.log('新值:', newValue)}},data() {return {total: 0}},methods: {handleAddTotal() {this.total++}}
}
</script>

3. 监听对象和route变化

watch监听的目标,可以是基本类型,也可以是对象,也可以是对象里的一个值。而监听目标的属性,可以是一个函数,也可以是一个包含handler(回调函数),immediate(是否初始化后立即执行一次)和deep(是否开启深度监听)的对象。

<script>
export default {name: 'Home',watch: {// 监听基本类型aaa(newValue, oldValue) {console.log('旧值:', oldValue)console.log('新值:', newValue)},// 监听基本类型,并且回调函数写在methods里,且初始化加载立即执行一次bbb: {handler: 'handleBBB',immediate: true},// 监听对象类型,需要开启深度监听ccc: {handler: (newValue, oldValue) {console.log('旧值:', oldValue)console.log('新值:', newValue)},deep: true},// 监听对象里的某个值'ddd.d2.d21': {handler: (newValue, oldValue) {console.log('旧值:', oldValue)console.log('新值:', newValue)}},// 监听route变化'$route': {handler: (newValue, oldValue) {console.log('旧值:', oldValue)console.log('新值:', newValue)}}},data() {return {aaa: 0,bbb: 0,ccc: {c1: 0,c2: 0},ddd: {d1: 0,d2: {d21: 0}}}},methods: {handleBBB() {this.bbb++}}
}
</script>

4. 使用场景

watch监听属性使用场景很多。比如:

  1. 即时表单验证
  2. 搜索
  3. 监听数据变化,做出相应改变

如下例子,监听 keyword 的值,实时打印出来。

<template><div class="home_box"><input type="text" v-model="keyword"></div>
</template><script>
export default {name: 'Home',watch: {keyword: {handler: 'handleKeywordChange'}},data() {return {keyword: '',}},methods: {handleKeywordChange(newValue, oldValue) {console.log(newValue, oldValue)}}
}
</script>

本次分享就到这儿啦,我是鹏多多,如果您看了觉得有帮助,欢迎评论,关注,点赞,转发,我们下次见~

往期文章

  • css使用aspect-ratio制作4:3和9:16和1:1等等比例布局
  • Web前端页面开发阿拉伯语种适配指南
  • flutter-使用extended_image操作图片的加载和状态处理以及缓存和下载
  • flutter-制作可缩放底部弹出抽屉评论区效果
  • flutter-实现Tabs吸顶的PageView效果
  • Vue2全家桶+Element搭建的PC端在线音乐网站
  • 助你上手Vue3全家桶之Vue3教程
  • 超详细!Vue的九种通信方式
  • 超详细!Vuex手把手教程
  • 使用nvm管理node.js版本以及更换npm淘宝镜像源
  • vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令

个人主页

  • CSDN
  • GitHub
  • 掘金
http://www.xdnf.cn/news/10071.html

相关文章:

  • Oracle数据仓库在医院的应用场景
  • 在CentOS7上使用tree查看目录树
  • 通过回调函数注册定时器触发事件
  • Hive的存储格式如何优化?
  • PX30 GPIO驱动开发系统集成完整流程指南
  • 数据结构 --链表
  • Css样式中设置gap: 12px以后左右出现距离问题解析
  • 什么是内存分页和分段?
  • 【Netty系列】Reactor 模式 1
  • 如何在 Vue.js 中集成 Three.js —— 创建一个旋转的 3D 立方体
  • keepalived定制日志bug
  • SI24R05国产低功耗2.4GHz+125K低频唤醒SoC人员定位/畜牧业牛羊定位/资产管理定位方案芯片
  • 什么是 SQL 注入?如何防范?
  • 【线上故障排查】系统缓存雪崩故障排查与解决全流程解析
  • leetcode hot100刷题日记——29.合并两个有序链表
  • IntelliJ IDEA 中进行背景设置
  • ASP.NET MVC添加模型示例
  • 手机照片太多了存哪里?
  • 使用逆强化学习对网络攻击者的行为偏好进行建模
  • GROMACS 软件包介绍与使用指南
  • 负载均衡群集---Haproxy
  • 不用 apt 的解决方案(从源码手动安装 PortAudio)
  • ReactHook有哪些
  • 物流项目第十期(轨迹微服务)
  • 实现一个免费可用的文生图的MCP Server
  • OpenCV---minAreaRect
  • RK3588和FPGA桥片之间IO电平信号概率性不能通信原因
  • 使用摄像头推流+VLC软件拉流
  • Spring Boot微服务架构(九):设计哲学是什么?
  • FreeRTOS通俗理解指南:基础概念 + 架构+ 内核组件+练手实验