Vue学习(二)计算属性、监视属性、样式绑定

计算属性

定义:如果一个要用的数据,而是由已有的属性(data中的属性)计算得来,那么可以将其作为计算属性

原理:底层借助了Object.defineproperty方法提供的getter和setter。

计算属性都放在vue实例中的computed属性中,computed也是以对象的形式,其中的属性就是一个个计算属性。每个计算属性中又以对象的形式,在其中定义了getter和setter,getter是用于决定计算属性的值,setter用于定义计算属性被修改时变化的规则。

在getter和setter中,要获取data中的属性的值,使用this.属性名

优势:与methods方式实现方式相比,计算属性有着缓冲机制,效率更高,方便调试

注:计算属性最终会出现在vm上,世界读取使用即可。如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生变化

例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title><script type="text/javascript" src="../vue.js"></script></head><body><div id="root">姓:<input type="text" v-model="firstName"><br><br>名:<input type="text" v-model="lastName"><br><br>全名:<span>{{fullName}}</span></div></body><script type="text/javascript">new Vue({el:'#root',data:{firstName:"张",lastName:"三"},computed:{fullName:{//如果有人读取fullName的值时,get就会被调用,且返回值就作为fullName的值get(){//此处的this是vm//get什么时候调用:1.初次读取fullName 2.所依赖的数据发生变化时 return this.firstName + "-" + this.lastName},//set什么时候被调用:当fullName被修改时set(value){const arr = value.slipt('-')this.firstName = arr[0]this.lastName = arr[1]}}}})</script>
</html>

计算属性的简写方式:

当计算属性只有getter而不使用setter时便可以使用

// 简写形式:fullName(){return this.firstName + '-' + this.lastName}

此时fullName的方法的内容指的就是getter的内容

监视属性

监视属性写在Vue实例的watch属性中,同样,watch也是一个对象的形式,watch的属性就是要监视的属性的key(可以监视data中的属性,也可以监视计算属性),比如要监视data中的name,那么watch中写上一个名为name的key。key可以直接写作属性名,不用引号(原始的写法是写为一个key的字符串)。

在watch的属性中,以对象的形式,写上handler方法,handler方法就是当监视的那个目标属性发生改变的时候,就会调用此handler方法,在此handler方法中写目标属性发生变化时要采取的业务。在watch的属性中,还有一个属性叫immediate,为true时,就是初始化页面时也会调用handler方法

例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title><script type="text/javascript" src="../vue.js"></script></head><body><div id="root"><h2>今天天气很{{info}}</h2><br/><button @click="changeWeather">切换天气</button></div></body><script type="text/javascript">const vm = new Vue({el:'#root',data:{isHot:true},computed:{info(){return this.isHot?"热":"冷"}},methods: {changeWeather(){this.isHot = !this.isHot}},watch:{isHot:{ //原始写法是'isHot':{……//当isHot发生变化的时候调用handler,有两个参数:newValue(变化后的值),oldValue(变化前的值)handler(newValue,oldValue){console.log("温度变化了:"+oldValue+'-->'+newValue)},//该属性的作用是为true时,初始化时,也会调用handler方法immediate:true}}})//写法二,直接使用vm来配置监视属性// vm.$watch('isHot',{  //第一个参数是监视的属性的名称,第二个参数是同上的isHot:……中的内容一样//   //当isHot发生变化的时候调用handler,有两个参数:newValue(变化后的值),oldValue(变化前的值)//   handler(newValue,oldValue){//         console.log("温度变化了:"+oldValue+'-->'+newValue)//       },//       //该属性的作用是为true时,初始化时,也会调用handler方法//       immediate:true// })</script>
</html>

深度监视

如果data中有多级的属性,比如data中有一个属性A是对象的类型,要监视此属性A的内部属性a1,在监视的时候,就要使用引用的方式,但是不能直接写key的名字了,要写原始的字符串形式的key:

 watch:{'A.a1'handler(newValue,oldValue){……},}}

如果要检测的是A中一旦有内部属性发生变化,此时就要使用与handler同级的deep属性,设置为true就是会检测监视的属性的所有内部属性

watch:{A:{ deep:true,handler(newValue,oldValue){……},}}

监视的简写形式

当监视不需要设置deep属性进行深度监视以及不使用immediate属性初始化调用handler的时候,就可以使用监视的简写形式,类似于计算属性的简写形式,isHot作为一个方法的形式出现的时候,就是监视isHot属性,并且此方法就代表监视isHot的handler方法,例:

watch:{//简写形式isHot(newValue,oldValue){console.log("温度变化了:"+oldValue+'-->'+newValue)}}

使用vm的$watch的简写:function就是代表handler方法

vm.$watch('isHot',function(oldValue,newValue){console.log("温度变化了:"+oldValue+'-->'+newValue)})

computed与watch的对比

区别:

  1. computed能完成的功能,watch都能完成。
  2. watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作

注:

  1. 被vue管理的函数,最好写成普通函数,这样this的指向才是vm或者组件实例对象。
  2. 所有不被vue管理的函数(定时器的回调函数、ajax的回调函数等),最好写成箭头函数,这样this指向的才是vm或者组件实例对象

绑定样式

绑定class样式

当样式的类名不确定的时候,需要动态指定的时候,就可以使用 :class=”表达式” 来指定样式,可以指定多个:class,最终的效果其实是汇总为一个class样式里面,比如:

<div class=”basic” :class=”mood”></div>,mood属性的值为happy,结果出来其实就是class=”basic happy”。

案例:点击区域后切换该区域指定的颜色为happy或sad

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title><script type="text/javascript" src="../vue.js"></script><style>.basic{height: 600px;width: 800px;}.happy{background-color: aqua;}.sad{background-color: blanchedalmond;}</style></head><body><div id="root"><h3>你好,{{name}} </h3><br/><div class="basic" :class="mood" @click="changeMood"></div></div></body><script type="text/javascript">new Vue({el:'#root',data:{name:'李二狗',mood:'happy',moodType:true},methods: {changeMood(){this.moodType = !this.moodTypeif(this.moodType == true){this.mood = 'happy'}else{this.mood = 'sad'}}},})</script>
</html>

关于:class=”表达式”的表达式的其他写法

数组写法:

其中 :class=”表达式“ 的这个表达式还可以是一个字符串数组,其中的字符串元素的值就是样式的class的名字的字符串,便可以更灵活地改变样式的个数、类型 。

对象写法:

这个表达式还可以是一个对象,这个对象的写法有个格式:这个对象的属性的属性名为样式的class名,属性值为boolean类型的,为true就是应用此样式,为false就是不应用此样式。这种方式通常用于变化的样式个数和类型已经确定,动态改变的只是对应样式是应用还是不应用的情况

classObj:{happy:true,sad:false
}

绑定style样式

绑定style的样式的方式是使用:style=”对象/数组”,对象的格式为:对象的属性的属性名为样式类型名称(样式的名称要从短横线式变成驼峰式,比如font-size变为fontSize),属性值为样式的值。

styleObj:{fontSize:'10px',backgroundColor:'red'
}

还可以使用数组的写法,数组的元素就是如上的代表样式的对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达梦脱机备份报错[-7170]:bakres连接DMAP失败

达梦脱机备份报错[-7170]:bakres连接DMAP失败 [dmdbatest1 ~]$ DmServiceDMSVR01 stop Stopping DmServiceDMSVR01: [ OK ] [dmdbatest1 ~]$ [dmdbatest1 ~]$ dmrman dmrman V8 RMAN> backup database /dm8/data/DM01/dm.ini full; backu…

python绘制方波信号

python绘制方波信号 1、效果 2、导入库 pip install numpy pip install matplotlib3、实现代码 # -*- coding: utf-8 -*-""" @contact: 微信 1257309054 @file: test.py @time: 2024/7/28 14:48 @author: LDC """ import numpy as np import …

IOS-04 Swift 中数组、集合、字典、区间、元组和可选类型

在 Swift 编程语言中&#xff0c;数据结构和类型的合理运用对于高效编程至关重要。接下来&#xff0c;我们将深入探讨数组、集合、字典、区间、元组和可选类型的相关知识。 一、数组&#xff08;Array&#xff09; &#xff08;一&#xff09;元素定义 可以通过多种方式定义数…

Hello 算法:动画图解、一键运行的数据结构与算法教程

Hello 算法 《Hello 算法》是一份开源、免费的数据结构与算法入门教程&#xff0c;特别适合新手。全书采用动画图解&#xff0c;内容清晰易懂&#xff0c;学习曲线平滑&#xff0c;引导初学者探索数据结构与算法的知识地图。源代码可以一键运行&#xff0c;帮助读者通过练习提…

C#中的同步编程和异步编程

1. 简单描述一下同步编程和异步编程 同步编程&#xff1a;按照代码的顺序一行一行执行&#xff0c;如果某个操作需要等待&#xff08;比如读取文件、网络请求、数据库操作等&#xff09;&#xff0c;那么当前的线程就会停下来&#xff0c;一直到这个操作完成了之后&#xff0c…

洛谷P1064金明的预算方案题解

题目传送门 思路 购买附件是一定要购买主件&#xff0c;并且附件最多有两个&#xff0c;所以一个主件搭配附件的方法只有四种&#xff08;选第一个&#xff0c;选第二个&#xff0c;都选&#xff0c;不选&#xff09;。所以我们在dp时只考虑主件&#xff0c;枚举这四种方案。…

git学习(一)

一、代码仓库的初始化 1、先在本地操作&#xff0c;不涉及到远程服务器&#xff0c;创建目录mkdir git demo 想要本地创建的目录成为一个远程仓库就需要初始化git init git init 后会发生什么&#xff1f; 2、watch -n 1 -d tind每隔1s打印当前文件目录并且刷新 左边命令 wa…

搞DDR,你是可以看看我的这篇笔记(三)

关于DDR PHY这个部分,是数模混合器件,工作涉及到了很多信号完整性,眼图,模拟等相关的东西我就没讲了。因为确实不太熟悉,只能站在架构、功能、使用上去聊聊。 上一篇我们看了这个图片,简化就是下面这个样子: 其实这个也不太合适~~~ 这样舒服多了,一般DDRC和DDRPHTY都会…

基于机器学习的股票预测及股票推荐系统的设计与实现

基于机器学习的股票预测及股票推荐系统的设计与实现 Design and Implementation of a Machine Learning-based Stock Prediction and Stock Recommendation System 完整下载链接:基于机器学习的股票预测及股票推荐系统的设计与实现 文章目录 基于机器学习的股票预测及股票推荐…

被工信部认可的开源软件治理解决方案

近日&#xff0c;工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”&#xff0c;开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选&#xff0c;成为经工信部认可的优秀解决方案&#xff0c;这是开源网安连续两届荣获此荣誉。 工业和信息化部网…

17.延迟队列

介绍 延迟队列&#xff0c;队列内部是有序的&#xff0c;延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中&#xff0c;消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺&#xff0c;如果十天内没…

【Redis系列】RedisTemplate的使用与注意事项

目录 一.什么是RedisTemplate 二.如何使用RedisTemplate RedisTemplate的API 序列化 三.StringRedisTemplate 一.什么是RedisTemplate RedisTemplate 是一个工具类&#xff0c;由 Spring 官方提供的方便操作 Redis 数据库的一个工具类&#xff0c;来源于 org.springframe…

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型

目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天&#xff08;chat completion&#xff09; 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…

涉密移动载体智能柜管控系统DW-S404|国产自主可控

东识移动载体管控系统载体柜系统采用RFID识别技术&#xff0c;结合智能载体管理软件&#xff0c;实现了文件载体权限管理、定位管理、智能存取、智能盘点、在线监控等功能&#xff0c;同时对文件载体进行规范化、智能化、自动化管理。工作人员通过授权进行文件、载体、卷宗等存…

C# 简单的单元测试

文章目录 前言参考文档新建控制台项目新建测试项目添加引用添加测试方法测试结果(有错误)测试结果&#xff0c;通过正规的方法抛出异常 总结 前言 听说复杂的项目最好都要单元测试一下。我这里也试试单元测试这个功能。到时候调试起来也方便。 参考文档 C# 单元测试&#xf…

Windows 下的sqlserver数据拷贝到linux

SSH打开linux终端 1.启动 sqlcmd。 下面的示例以 SA 用户身份连接到本地 SQL Server。 出现提示时输入密码&#xff0c;或使用 -P 参数指定密码。 sqlcmd -S localhost -U sa 2.在 >1 提示符下&#xff0c;输入以下 RESTORE DATABASE 命令&#xff0c;并在每行后按 Enter&…

这一文,关于 Java 泛型的点点滴滴 一(泛型基础、类型擦除)

作为一个 Java 程序员&#xff0c;用到泛型最多的&#xff0c;我估计应该就是这一行代码&#xff1a; List<String> list new ArrayList<>();这也是所有 Java 程序员的泛型之路开始的地方啊。 不过本文讲泛型&#xff0c;先不从这里开始讲&#xff0c;而是再往前…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中&#xff0c;高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人&#xff0c;以其卓越的技术和智能化的设计&#xff0c;为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器&#xff0c;拥有多种移载平台&#xff0c…

第14章 Express性能优化

性能优化是确保 Express 应用在高并发环境下能够高效运行的重要环节。优化得当可以显著提升应用的响应速度和稳定性。本章将详细介绍 Express 应用的各种性能优化方法和技巧。 缓存策略 缓存是提升应用性能的常用手段。它通过存储频繁访问的数据&#xff0c;减少数据库查询和计…

dpdk编译安装以及接收udp报文(基于ubuntu)

目录 1、编译 2、设置运行环境 3、使用dpdk接收udp报文 3.1、设置发送端arp信息 3.2、测试 3.3、代码 4、其他 1、编译 代码下载&#xff1a; DPDK 下载版本&#xff1a;DPDK 19.08.2 export RTE_SDK/root/dpdk-stable-19.08.2/ export RTE_TARGETx86_64-native-li…