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

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.lryc.cn/news/2379954.html

相关文章:

  • python fastapi + react, 写一个图片 app
  • nginx集成防火墙ngx_waf的docker版
  • vscode c++编译onnxruntime cuda 出现的问题
  • sts下载安装
  • 中服云生产线自动化智能化调度生产系统:打造智能制造新标杆
  • next.js实现项目搭建
  • Redisson 四大核心机制实现原理详解
  • 云鼎入鼎系统:一站式电商管理解决方案
  • Leetcode134加油站
  • 关于Android Studio for Platform的使用记录
  • Linux的内存泄漏问题及排查方法
  • uniapp 微信小程序 获取openId
  • 隧道结构安全在线监测系统解决方案
  • Docker 运维管理
  • 【Redis】快速列表结构
  • 阿里巴巴 1688 数据接口开发指南:构建自动化商品详情采集系统
  • [SpringBoot]Spring MVC(2.0)
  • Golang的网络安全策略实践
  • STM32外设AD-轮询法读取模板
  • C++编程this指针练习
  • iOS音视频解封装分析
  • 突破智能驾舱边界,Imagination如何构建高安全GPU+AI融合计算架构
  • DeepSeek 如何实现 128K 上下文窗口?
  • 云计算简介:从“水电”到“数字引擎”的技术革命
  • 计算圆周率 (python)
  • Python 实现图片浏览和选择工具
  • Python实现的在线词典学习工具
  • ES常识9:如何实现同义词映射(搜索)
  • BGP综合实验(2)
  • java实现poi-ooxml导出Excel的功能