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

vue的监视属性

目录
      • 1. 场景引入
      • 2. watch
      • 3. 深度监视
      • 4. 监视属性简写
      • 5. 小结

1. 场景引入

在实际开发中,有时开发者需要根据某个属性的变化,做出相应的决策,因此Vue为开发者提供了watch.这一监视属性,用于实现此类需求。比如下面这个场景,开发者要监测天气的变化,每次点击切换天气,就会变化,要求我们对不同的天气做出不同的处理。

在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<div id="root"><h2>今天天气很{{info}}</h2><button @click="changeWeather">切换天气</button>
</div>
</body>
<script>Vue.config.productionTip = false;const vm = new Vue({el:'#root',data:{isHot:true,},computed:{info(){return this.isHot ? '炎热':'寒冷'}},methods:{changeWeather(){this.isHot = !this.isHot}},})
</script>
</html>
2. watch

我们在vm中加入watch属性,

监视属性中的函数,能够通过获取newValueoldValue的值,进行监视到属性改变后的一些操作;

接收两个参数:

**newValue:**表示新的值

**oldValue:**表示改变前的值

在这里插入图片描述

        watch:{isHot:{handler(newValue,oldValue){console.log("天气被修改了"+newValue+oldValue);}}

我们再次尝试,控制台打印出了天气的变化

在这里插入图片描述

immediate属性

实现初始化的时候调用一次监视函数handler,默认为false

   watch:{isHot:{immediate:true,handler(newValue,oldValue){console.log("天气被修改了"+newValue+oldValue);}}

在这里插入图片描述

同时watch存在第二种写法,在vm对象外面

在这里插入图片描述

3. 深度监视

watch默认监视单层属性的改变,想实现监测多层结构需要使用deep属性

监视多级结构中某个属性的变化
watch:{ “numbers.a”:{ … } } //numbers是data上的一个key,里面包含a

这里注意:本来所监视的属性都是字符串,需要带双引号,只不过单层的省略了双引号

deep属性
用于开启深度监视,多级结构中任何一个属性值发生变化,都能够检测到(内部的改变也能够通过外部监测到),监视多级结构中所有属性的变化
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<div id="root"><h2>今天天气很{{info}}</h2><button @click="changeWeather">切换天气</button><hr/><button @click="numbers.a++">点我a++</button><h3>{{numbers.a}}</h3><button @click="numbers.b++">点我b++</button><h3>{{numbers.b}}</h3>
</div>
</body>
<script>Vue.config.productionTip = false;const vm = new Vue({el:'#root',data:{isHot:true,numbers:{a:1,b:1,}},computed:{info(){return this.isHot ? '炎热':'寒冷'}},methods:{changeWeather(){this.isHot = !this.isHot}},watch:{numbers:{deep:true,handler(){console.log('numbers被修改');}}}
<span class="token punctuation">}</span><span class="token punctuation">)</span>

/* vm.$watch(‘isHot’,{
immediate:true,
handler(newValue,oldValue){
console.log(“天气被修改了”+newValue+oldValue);
}
})*/

</script>
</html>

在这里插入图片描述

可以看到,点击a或者b++的按钮是有被检测到的
在这里插入图片描述

4. 监视属性简写

与计算属性类似,当不需要使用其他属性只使用handler属性时,可以使用简写形式

  isHot(newValue,oldValue){console.log("天气被修改了"+newValue+oldValue);}

函数写法:

vm.$watch('isHot',function(newValue,oldValue){console.log("天气被修改了"+newValue+oldValue);}
5. 小结

小结一下:
在这里插入图片描述

http://www.lryc.cn/news/335953.html

相关文章:

  • 外包干了15天,技术倒退明显
  • 防止邮箱发信泄露服务器IP教程
  • 鸿蒙HarmonyOS开发实战:【分布式音乐播放】
  • 【iOS ARKit】App 中嵌入 AR Quick Look
  • 【Web开发】jquery图片放大镜效果制作变焦镜头图片放大
  • RTC实时显示时间(备份电源 备份域的作用)
  • 【YOLOv9】完胜V8的SOTA模型Yolov9(论文阅读笔记)
  • 学生管理系统详细需求文档
  • 产品经理功法修炼(4)之产品管理
  • 【LeetCode热题100】【二叉树】二叉树展开为链表
  • 云原生__K8S
  • nginx配置证书和私钥进行SSL通信验证
  • 【面试题】微博、百度等大厂的排行榜如何实现?
  • com.intellij.diagnostic.PluginException 问题
  • Altair® (澳汰尔)Inspire™ Render —— 强大的 3D 渲染和动画工具
  • 虚幻引擎启动报错记录
  • 最祥解决python 将Dataframe格式数据上传数据库所碰到的问题
  • 【汇编语言实战】统计个数
  • SQLite数据库概述及在Java中的应用
  • 嵌入式单片机补光灯项目操作实现
  • 【3GPP】【核心网】核心网/蜂窝网络重点知识面试题二(超详细)
  • R语言记录过程
  • 【leetcode面试经典150题】36. 旋转图像(C++)
  • AOP 面向切面编程 入门练习
  • 【Qt】:对话框(一)
  • 数据结构与算法 — 贪心算法
  • python如何连接openGauss及django相关配置
  • ​开箱子的游戏能做吗?
  • 一、Spring基础 --- 基础内容(二) (咕P4)
  • uview2 表单Form校验validate不生效处理方法