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

Vue——认识day05_监视属性

目录

1.天气案例介绍以及初步实现

2.监视属性天气案例的实现

3.深度监视

4.监视的简写形式

5.姓名案例的监视属性实现

6.watch和computed对比



1.天气案例介绍以及初步实现

        这段代码实现了一个简单的天气选择功能。页面中有一个标题和一个按钮,点击按钮可以切换天气的显示。默认显示晴天,点击按钮后会切换到雨天,并在副标题中显示当前选择的天气。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>天气案例</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body><body><div id="root"><h1>你是喜欢晴天还是雨天</h1><h2>我喜欢{{weatherInfo}}天</h2><button @click="changeWeather">切换天气</button><!-- <button @click="weather = !weather">切换天气</button> --></div></body><script type="text/javascript">Vue.config.productionTip=falsenew Vue({el:'#root',data:{// true代表为晴天晴天,否则为雨天weather:true},computed:{weatherInfo(){return this.weather?'晴':'雨'}},methods: {changeWeather(){this.weather = !this.weather}},});
</script>
</html>

2.监视属性天气案例的实现

监视属性watch:

  1. 当被监视的属性变化时,回调函数会自动调用,可以在回调函数中进行相关操作。
  2. 要进行监视的属性必须存在,才能进行监视。
  3. 监视属性有两种写法: (1) 在创建Vue实例时传入watch配置对象,其中键是被监视的属性名称,值是对应的回调函数。 (2) 通过vm.$watch方法来监视属性,需要传入被监视的属性名称和回调函数。

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>天气案例</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body><body><div id="root"><h1>你是喜欢晴天还是雨天</h1><h2>我喜欢{{weatherInfo}}天</h2><button @click="changeWeather">切换天气</button></div></body><script type="text/javascript">Vue.config.productionTip=falseconst vm = new Vue({el:'#root',data:{// true代表为晴天晴天,否则为雨天weather:true},// 监视属性watch:{weather:{// 初始化时让handler被触发immediate:true,// 当weather发生改变的时候被调用handler(newValue,oldValue){console.log('weather:',oldValue,'被修改为了',newValue)} }},computed:{weatherInfo(){return this.weather?'晴':'雨'}},methods: {changeWeather(){this.weather = !this.weather}},});// 第二种实现监视的方法
/*     vm.$watch('weather',{// 初始化时让handler被触发immediate:true,// 当weather发生改变的时候被调用handler(newValue,oldValue){console.log('weather:',oldValue,'被修改为了',newValue)}  }) */
</script>
</html>

3.深度监视

        深度监视是指在Vue中使用watch来监测对象内部值的改变。默认情况下,Vue的watch只会监测对象的第一层属性变化。但是可以通过配置deep:true来实现对对象内部值的多层监测。需要注意的是,Vue自身是可以监测对象内部值的改变的,但是Vue提供的watch默认是不会进行深度监视的。在使用watch时,根据数据的具体结构决定是否需要采用深度监视。

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>天气案例</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body><body><div id="root"><h1>你是喜欢晴天还是雨天</h1><h2>我喜欢{{weatherInfo}}天</h2><button @click="iLikeYou">心中的秘密</button><button @click="changeWeather">切换天气</button><hr><h3>a:{{numbers.a}}</h3><button @click="numbers.a++">点我a+1</button><br><h3>b:{{numbers.b}}</h3><button @click="numbers.b++">点我b+1</button></div></body><script type="text/javascript">Vue.config.productionTip=falseconst vm = new Vue({el:'#root',data:{// true代表为晴天晴天,否则为雨天weather:true,numbers:{a:1,b:1}},// 监视属性watch:{weather:{// 初始化时让handler被触发//    immediate:true,// 当weather发生改变的时候被调用handler(newValue,oldValue){console.log('weather:',oldValue,'被修改为了',newValue)} },// 监视多级结构某个属性的变化
/*             'numbers.a':{handler(){console.log('a改变了')}} */numbers:{// 开启即可监视多级结构中所有属性的变化deep:true,handler(){console.log('numbers改变了')}}},computed:{// 计算属性weatherInfo(){return this.weather?'晴':'雨'}},methods: {changeWeather(){this.weather = !this.weather},iLikeYou(){alert('我喜欢你(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤')}},});// 第二种实现监视的方法
/*     vm.$watch('weather',{// 初始化时让handler被触发immediate:true,// 当weather发生改变的时候被调用handler(newValue,oldValue){console.log('weather:',oldValue,'被修改为了',newValue)}  }) */
</script>
</html>

4.监视的简写形式

具体如代码中所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>天气案例</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body><body><div id="root"><h1>你是喜欢晴天还是雨天</h1><h2>我喜欢{{weatherInfo}}天</h2><button @click="iLikeYou">心中的秘密</button><button @click="changeWeather">切换天气</button></div></body><script type="text/javascript">Vue.config.productionTip=falseconst vm = new Vue({el:'#root',data:{// true代表为晴天晴天,否则为雨天weather:true,},// 监视属性watch:{// 正常写法
/*             weather:{// 初始化时让handler被触发//    immediate:true,// 深度监视//    deep:true,handler(newValue,oldValue){console.log('weather:',oldValue,'被修改为了',newValue)} }, */// 简写的前提就是没有其他的配置项
/*             weather(newValue,oldValue){console.log('weather:',oldValue,'被修改为了',newValue)} */},computed:{// 计算属性weatherInfo(){return this.weather?'晴':'雨'}},methods: {changeWeather(){this.weather = !this.weather},iLikeYou(){alert('我喜欢你(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤')}},});// 第二种实现监视的方法,完整写法
/*     vm.$watch('weather',{// 初始化时让handler被触发immediate:true,// 当weather发生改变的时候被调用handler(newValue,oldValue){console.log('weather:',oldValue,'被修改为了',newValue)}  }) */// 简写vm.$watch('weather',function(newValue,oldValue){console.log('weather:',oldValue,'被修改为了',newValue)})
</script>
</html>

5.姓名案例的监视属性实现

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>姓名案例_监视属性实现</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body><div id="root">姓:<input type="text" v-model="firstName"><br><br>名:<input type="text" v-model="lastName"><br><br>全名:<span>{{fullName}}</span><br><br></div></div></body><script type="text/javascript">Vue.config.productionTip=falseconst vm = new Vue({el:'#root',data:{firstName:'W',lastName:'J',fullName:'W-J'},// 计算属性computed:{},// 监视属性watch:{firstName:{handler(newFirstName){this.fullName = newFirstName + '-' + this.fullName.split('-')[1]}},lastName:{handler(newLastName){this.fullName = this.firstName + '-' + newLastName}}}});
</script>
</html>

6.watch和computed对比

computed和watch在功能上有一些相似之处,但也有一些区别。首先,computed可以完成watch的功能,但是watch能完成的功能,computed不一定能完成。例如,watch可以进行异步操作,而computed不适合进行异步操作。

另外,有两个重要的原则需要注意:

  1. 对于被Vue所管理的函数,最好写成普通函数,这样函数内部的this指向的是Vue实例对象或组件实例对象。
  2. 对于不被Vue所管理的函数,比如定时器的回调函数、ajax的回调函数、Promise的回调函数等,最好写成箭头函数,这样函数内部的this指向的也是Vue实例对象或组件实例对象。

这样可以确保在函数中使用this时,能够正确地指向Vue实例对象或组件实例对象。


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Apifox使用学习
  • Java:正则表达式 matches
  • 如何在D盘创建虚拟环境?包括安装PyTorch和配置PyCharm
  • 服务器数据恢复—LeftHand存储中raid5阵列多块磁盘离线的数据恢复案例
  • Profinet 从站转 EtherNet/IP 从站网关
  • volatile关键字的作用
  • 爆改YOLOv8|利用yolov10的PSA注意力机制改进yolov8-高效涨点
  • C# 使用国密SM4加密解密
  • 【如何在MacOS升级ruby版本】
  • 根据子网前缀的长度计算ip范围
  • 搭建数据库启前后端环境
  • Cobalt Strike 4.8 用户指南-第六节-Payload Artifacts和反病毒规避
  • 3分钟带你了解什么是元数据管理
  • 基于Python的网络编程
  • docker安装配置、docker命令
  • 《Java编程思想》读书笔记-对象导论
  • Android Studio:GIT提交项目到远程仓库
  • interface和setter,getter
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • k8s 面向应用开发者的基础命令
  • nginx 负载服务器优化
  • PAT A1050
  • php的插入排序,通过双层for循环
  • Web标准制定过程
  • XForms - 更强大的Form
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 多线程事务回滚
  • 分布式任务队列Celery
  • 汉诺塔算法
  • 将 Measurements 和 Units 应用到物理学
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 三分钟教你同步 Visual Studio Code 设置
  • ​Spring Boot 分片上传文件
  • ​业务双活的数据切换思路设计(下)
  • ‌移动管家手机智能控制汽车系统
  • #define 用法
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (C语言)共用体union的用法举例
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转) Face-Resources
  • (转)大型网站架构演变和知识体系
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装