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

Vue-监听属性

监听属性

简单监听

点击切换名字,来回变更Tom/Jerry,输出 你好,Tom/Jerry

在这里插入图片描述

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>监听属性</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>监听属性</h1><div><h2>你好,{{name}}</h2><button @click="changeName">切换名字</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示const vm = new Vue({el: "#root",data: {isTom: true},computed: {name(){return this.isTom ? "Tom" : "Jerry"}},methods: {changeName(){this.isTom = !this.isTom}},watch: {// isTom:{//   immediate:true, //初始化就执行handler方法//   // isTom发生改变时执行//   handler(newValue,oldValue){//     console.log("isTom切换了", oldValue + "->" + newValue)//   }// },name:{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("名字切换了", oldValue + "->" + newValue)}}},});vm.$watch('isTom',{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("isTom切换了", oldValue + "->" + newValue)}})</script>
</html>
  • 效果

在这里插入图片描述

深度监听

监听对象发生变更 numbers:{x:1,y:1}

对象某个属性监听 (x)

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>监听属性</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>监听属性</h1><div><h2>你好,{{name}}</h2><button @click="changeName">切换名字</button><h2>单属性监听</h2><button @click="numbers.x++">监听x+1</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示const vm = new Vue({el: "#root",data: {isTom: true,numbers:{x:1,y:2}},computed: {name(){return this.isTom ? "Tom" : "Jerry"}},methods: {changeName(){this.isTom = !this.isTom}},watch: {// isTom:{//   immediate:true, //初始化就执行handler方法//   // isTom发生改变时执行//   handler(newValue,oldValue){//     console.log("isTom切换了", oldValue + "->" + newValue)//   }// },name:{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("名字切换了", oldValue + "->" + newValue)}},'numbers.x':{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("x变更了", oldValue + "->" + newValue)}},numbers:{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("numbers变更了", oldValue + "->" + newValue)}}},});vm.$watch('isTom',{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("isTom切换了", oldValue + "->" + newValue)}})</script>
</html>
  • 效果

在这里插入图片描述

发现变更x, 并没有监听到numbers变更

属性变更能监听到整个对象的变化

深度监听 deep:true 可以监听对象内部的值改变(支持多层级)

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>监听属性</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>监听属性</h1><div><h2>你好,{{name}}</h2><button @click="changeName">切换名字</button><h2>单属性监听</h2><button @click="numbers.x++">监听x+1</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示const vm = new Vue({el: "#root",data: {isTom: true,numbers:{x:1,y:2}},computed: {name(){return this.isTom ? "Tom" : "Jerry"}},methods: {changeName(){this.isTom = !this.isTom}},watch: {// isTom:{//   immediate:true, //初始化就执行handler方法//   // isTom发生改变时执行//   handler(newValue,oldValue){//     console.log("isTom切换了", oldValue + "->" + newValue)//   }// },name:{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("名字切换了", oldValue + "->" + newValue)}},'numbers.x':{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("x变更了", oldValue + "->" + newValue)}},numbers:{immediate:true, //初始化就执行handler方法,deep:true,// 可以监听对象内部的值改变(支持多层级)// isTom发生改变时执行handler(newValue,oldValue){console.log("numbers变更了", JSON.stringify(oldValue) + "->" +  JSON.stringify(newValue))}}},});vm.$watch('isTom',{immediate:true, //初始化就执行handler方法// isTom发生改变时执行handler(newValue,oldValue){console.log("isTom切换了", oldValue + "->" + newValue)}})</script>
</html>
  • 效果

在这里插入图片描述

简写

前提条件:不需要特殊配置(deep、immediate)方可简写

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>监听属性</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>监听属性</h1><div><h2>你好,{{name}}</h2><button @click="changeName">切换名字</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示const vm = new Vue({el: "#root",data: {isTom: true,},computed: {name() {return this.isTom ? "Tom" : "Jerry";},},methods: {changeName() {this.isTom = !this.isTom;},},watch: {// 常规操作// name:{//   immediate:true, //初始化就执行handler方法//   // isTom发生改变时执行//   handler(newValue,oldValue){//     console.log("名字切换了", oldValue + "->" + newValue)//   }// },// 简写name(newValue, oldValue) {console.log("名字切换了", oldValue + "->" + newValue);},},});// 正常写法// vm.$watch('isTom',{//   immediate:true, //初始化就执行handler方法//   // isTom发生改变时执行//   handler(newValue,oldValue){//     console.log("isTom切换了", oldValue + "->" + newValue)//   }// })// 简写vm.$watch("isTom", function (newValue, oldValue) {console.log("isTom切换了", oldValue + "->" + newValue);});</script>
</html>
  • 效果

在这里插入图片描述

http://www.dtcms.com/a/198190.html

相关文章:

  • 理想AI Talk第二季-重点信息总结
  • 【ROS2】RViz2源码分析(九):RosClientAbstraction和RosNodeAbstraction的关系
  • ngx_http_realip_module 模块概述
  • 【DeepSeek论文精读】11. 洞察 DeepSeek-V3:扩展挑战和对 AI 架构硬件的思考
  • c++多线程debug
  • 符合Python风格的对象(再谈向量类)
  • Spring Web MVC————入门(3)
  • Go语言--语法基础5--基本数据类型--类型转换
  • Vue 3 中使用 md-editor-v3 的完整实例markdown文本
  • 网络编程套接字(二)
  • 高并发内存池|二、Common
  • 【JavaWeb】JDBC
  • 如何利用内网穿透实现Cursor对私有化部署大模型的跨网络访问实践
  • java中sleep()和wait()暂停线程的区别
  • [Java实战]Spring Boot整合Elasticsearch(二十六)
  • 大模型微调步骤整理
  • 第9章 组件及事件处理
  • Mac 在恢复模式下出现 旋转地球图标 但进度非常缓慢
  • Oracle 内存优化
  • java中的Servlet3.x详解
  • sparkSQL读入csv文件写入mysql
  • 10.8 LangChain三大模块深度实战:从模型交互到企业级Agent工具链全解析
  • 多模态大语言模型arxiv论文略读(八十一)
  • SuperYOLO:多模态遥感图像中的超分辨率辅助目标检测之论文阅读
  • 贪心算法应用:最大匹配问题详解
  • 算法岗实习八股整理——深度学习篇(不断更新中)
  • 软件工程各种图总结
  • MySQL开发规范
  • 互联网大厂Java面试:从Spring到微服务的深度探讨
  • 大模型deepseek与知识图谱的实践