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

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.xdnf.cn/news/6995.html

相关文章:

  • 报错System.BadImageFormatException:“试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)”
  • 面试中的线程题
  • 数据结构:二叉树一文详解
  • Linux安全第三章-系统安全及应用
  • 深入浅出Hadoop:大数据时代的“瑞士军刀”
  • 面向GIS的Android studio移动开发(二)--在地图上绘制电子围栏
  • Linux(2)——shell原理及Linux中的权限
  • 黑灰产业链深度解析
  • 最新缺陷检测模型:EPSC-YOLO(YOLOV9改进)
  • 使用 C# 入门深度学习:线性代数详细讲解
  • Android 性能优化入门(一)—— 数据结构优化
  • MLLM常见概念通俗解析(三)
  • Java面试深度解析:微服务与云原生技术应用场景详解
  • 互联网大厂Java面试:从Spring到微服务的深度探讨
  • 一种开源的高斯泼溅实现库——gsplat: An Open-Source Library for Gaussian Splatting
  • svn: E170013 和 svn: E120171 的问题
  • 二分算法的介绍简单易懂
  • 想要建站但没有服务器?雨云RCA,免服务器即可搭建完整网站!!!
  • 用golang实现二叉搜索树(BST)
  • (三)MMA(KeyCloak身份服务器/OutBox Pattern)
  • Serverless技术深度整合:从冷启动优化到边缘场景落地
  • 【Mini 型 http 服务器】—— int get_line(int sock, char *buf, int size);
  • spark数据的提取和保存
  • 5、事务和limit补充
  • 【Google机器学习实践指南(线性回归篇)
  • 【赵渝强老师】Memcached的路由算法
  • Linux rpmsg源码分析
  • 常见面试题:Webpack的构建流程简单说一下。
  • 【驱动开发】一 字符设备驱动框架
  • 10.11 LangGraph多角色Agent开发实战:生产级AI系统架构与性能优化全解析