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

03.vue3的计算属性

文章目录

    • 1.计算属性
      • 1.get()和set()
      • 2.computed的简写
      • 3.computed和methods对比
    • 2.相关demo
      • 1.全选和反选
      • 2.todos列表

1.计算属性

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。所以,对于任何包含响应式数据的复杂逻辑,你都应该使用计算属性

简单来说计算属性可以理解为:要用的属性不存在,要通过已有属性计算得来.底层借助了Object.defineproperty方法提供的getter和setter。

1.get()和set()

计算属性默认有自己的get()和set().

get()属性有以下特点:

(1).初次读取时会执行一次。
(2).当依赖的数据发生改变时会被再次调用。

set()属性的特点:

(1)当给计算属性设置值的时候会触发set()

(2)如果计算属性要被修改,那必须写set函数去响应修改,set函数可以接收用户修改计算属性的值

<template><div><h3>computed计算属性</h3><input type="text" v-model="firstName"> -<input type="text" v-model="lastName"> = <input type="text" v-model="fullName"></div>
</template>
<script setup>
import {ref,reactive,computed} from "vue"const firstName=ref("马");const lastName=ref("丽");
const fullName=computed({get(){console.log("get被调用了");return  firstName.value+'-'+lastName.value},set(value){console.log("set被触发了");//根据fullname的值重新设置firstName和lastNameconst newArr=value.split("-");firstName.value=newArr[0];lastName.value=newArr[1];}
})
</script>

2.computed的简写

在多数情况下我们只考虑读取不考虑修改,可以把set部分删掉,直接改写成函数的形式.

计算属性最终会出现在实例上,直接读取使用即可,不需要()调用

<template><div><h3>computed计算属性</h3><input type="text" v-model="firstName"> -<input type="text" v-model="lastName"> = <input type="text" v-model="fullName"><p><input type="text" v-model="str"> </p><h3>反转字符串:{{reverseStr}}</h3></div>
</template>
<script setup>
import {ref,reactive,computed} from "vue"//不考虑给fullname设置值
//此时如果给fullname赋值会报一个警告:Write operation failed: computed value is readonly
const fullName=computed(function(){return  firstName.value+'-'+lastName.value
})//反转字符串
const str=ref("hello");
const reverseStr=computed(()=> str.value.split("").reverse().join(""))
</script>

3.computed和methods对比

与methods实现相比,computed内部有缓存机制(复用),效率更高,调试方便。

<template><div><h3>methods和computed对比</h3><p>使用方法获取当前年龄:{{getAge()}}</p><p>使用方法获取当前年龄:{{getAge()}}</p><p>使用方法获取当前年龄:{{getAge()}}</p><p>使用计算属性获取当前年龄:{{age}}</p><p>使用计算属性获取当前年龄:{{age}}</p><p>使用计算属性获取当前年龄:{{age}}</p></div>
</template>
<script setup>
import {ref,reactive,computed} from "vue"
const bir=ref("2016/5/20");
//使用方法获取当前周岁
const getAge=()=>{console.log("methods");return new Date().getFullYear()-new Date(bir.value).getFullYear()}//使用计算属性获取当前周岁
const age=computed(()=>{console.log("computed")
return new Date().getFullYear()-new Date(bir.value).getFullYear();
})
</script>

在这里插入图片描述

计算属性 computed总结:

(1)computed计算属性,是通过计算得出来的属性 是依赖data中的值,如果依赖的值变化,计算属性也会发生变化
(2)computed是有缓存的,只要数据不发生变化,直接从缓存中读取值即可,只有当值发生变化的时候才会重新计算
(3)computed 有get属性还有set属性.大部分情况是读取值,所以设置值很少用到,这时可以简写,只获取get的值即可(只读)

2.相关demo

1.全选和反选

<template><div><table border="1" cellspacing="0" cellpadding="0"><tr><th><input type="checkbox" v-model="isAllChecked" /> 全选</th><th>商品名称</th><th>商品价格</th><th>商品数量</th></tr><tr v-for="item in iceCream" :key="item.id"><td><input type="checkbox" v-model="item.ischeck" /> </td><td>{{item.name}}</td><td>{{item.price}}</td><td>{{item.num}}</td></tr><tr><td>总计:</td><td colspan="3">{{total}}</td></tr></table></div>
</template>
<script setup>
import {ref,reactive,computed} from "vue"
//iceCreame的相关操作
const { iceCream } = reactive({iceCream: [{id: 98,name: '哈根达斯',num: 10,price: 98,ischeck: false},{id: 56,name: '八喜',num: 1,price: 48,ischeck: true},{id: 102,name: '冰雪皇后',num: 1,price: 29,ischeck: false},{id: 106,name: '蒙牛',num: 10,price: 4,ischeck: true}]
})
//实现反选和全选
const isAllChecked=computed({get(){console.log("触发了get");return iceCream.every(el=>el.ischeck);},set(value){console.log("触发了set",value);iceCream.forEach(el=>el.ischeck=value);}
})
//计算列表选中项的和
const  total=computed(()=>{return iceCream.reduce((cur,val)=>{if(val.ischeck){return cur+val.num*val.price;}else{return cur;}},0)})</script>

2.todos列表

<template><div><h3>my todos list <span :class="active" v-if="complate!==list.length" >{{list.length-complate}}</span>  </h3><input type="text" class="title"  placeholder="请输入新任务" v-model.trim="txt" @keydown.enter="addItem"   /><table class="todos"><tr><th>#</th><th>任务列表</th><th>筛选</th><th>状态</th><th>操作</th></tr><tr v-for="(item,index) in filterList" :key="item.id"><td>{{index+1}}</td><td>{{item.text}}</td><td><input type="checkbox" v-model="item.done" /> </td><td>{{item.done?"完成":"未完成"}}</td><td> <a href="#" @click="removeItem(item)">删除</a> </td></tr></table><p><input type="checkbox"  v-model="allChecked"   /> 显示全部 </p><p> 已完成 <strong>{{complate}}</strong> /总数 <strong>{{list.length}}</strong> </p></div>
</template>
<script setup>
import {ref,reactive,computed} from "vue"const  {list}=reactive({
list:[{id:1,text:"吃饭",done:true},{id:2,text:"睡觉",done:false},{id:3,text:"打豆豆",done:true}],})
const  txt=ref("");const nextId=ref(4); const allChecked=ref(false);//添加一项任务
const addItem=()=>{//如果输入框为空,不做任何操作if(!txt.value) return;var obj={id:nextId.value,text:txt.value,done:false}list.push(obj);txt.value="";nextId.value++;}//删除一项数据:const  removeItem=(item)=>{//根据当前点击这一项的id,查找在列表中的位置const index=list.findIndex(el=>el.id==item.id);list.splice(index,1)}//统计完成的个数const	complate=computed(()=>list.filter(el=>el.done).length)	//根据条件筛选列表const	filterList=computed(()=>{console.log(allChecked.value)return list.filter(el=>!el.done||allChecked.value)})//计算添加的类名const	active = computed(()=>list.length-complate>3?'danger':'waring')</script>

相关文章:

03.vue3的计算属性

文章目录1.计算属性1.get()和set()2.computed的简写3.computed和methods对比2.相关demo1.全选和反选2.todos列表1.计算属性 模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。所以&#xff0c;对于任何…...

Ceph性能调优

1. 最佳实践 1.1 基本 监控节点对于集群的正确运行非常重要&#xff0c;应当为其分配独立的硬件资源。如果跨数据中心部署&#xff0c;监控节点应该分散在不同数据中心或者可用性区域日志可能会让集群的吞吐量减半。理想情况下&#xff0c;应该在不同磁盘上运行操作系统、OSD…...

机器学习-问答题准备(英文)-更新中

第一章 入门 How would you define Machine Learning? Machine Learning is about building systems that can learn from data. Learning means getting better at some task, given some performance measure. Can you name four types of problems where it shines? To r…...

展示演示软件设计制作(C语言)

展示演示软件设计制作 所谓展示演示软件就像是PPT那样的东西。PPT是幻灯片式的展示&#xff0c;而我设计的软件是多媒体的&#xff0c;多样展示方法的&#xff0c;多种功能的。可以扩展为产品展示&#xff0c;项目介绍&#xff0c;景点导游&#xff0c;多媒体授课&#xff0c;…...

Android 自定义view 入门 案例

自定义一个圆环进度条&#xff1a; 1.首页Android Studio创建一个项目 2.在项目src/xxx/目录下右键选择创建一个自定义view页面&#xff1a;new->UICompoent->customer view 3.输入自定义名称&#xff0c;选择开发语言 4.确定之后&#xff0c;自动生成3个文件一个是&…...

[imangazaliev/didom]一个简单又快速的DOM操作库

DiDOM是一个功能齐全、易于使用和高性能的解析器和操作库&#xff0c;可以帮助PHP开发者更加高效地处理HTML文档。 为了更好地了解这个项目&#xff0c;我们先来看看下面的介绍。 安装 你可以使用composer来安装DiDOM&#xff0c;只需要在你的项目目录下执行下面的命令&…...

Cookie和Session的工作流程及区别(附代码案例)

目录 一、 HTTP协议 1.1 为什么HTTP协议是无状态的&#xff1f; 1.2 在HTTP协议中流式传输和分块传输编码的区别 二、Cookie和Session 2.1 Cookie 2.2 Session 2.3 Cookie和Session的区别 三、servlet中与Cookie和Session相关的API 3.1 HttpServletRequest 类中的相关方…...

适用于高级别自动驾驶的驾驶员可预见误用仿真测试

摘要 借助高级别自动驾驶(HAD)&#xff0c;驾驶员可以从事与驾驶无关的任务。在系统出现失效的情况下&#xff0c;驾驶员应该合理地重新获得对自动驾驶车辆(AV)的控制。不正确的系统理解可能会引起驾驶员的误操作&#xff0c;并可能导致车辆级的危害。ISO 21448预期功能安全标…...

Linux之进程知识点

一、什么是进程 进程是一个运行起来的程序。 问题思考&#xff1a; ❓ 思考&#xff1a;程序是文件吗&#xff1f; 是&#xff01;都读到这一章了&#xff0c;这种问题都无需思考&#xff01;文件在磁盘哈。 本章一开始讲的冯诺依曼&#xff0c;磁盘就是外设&#xff0c;和内…...

一种供水系统物联网监测系统

1.1供水系统 1.1.1监测范围选择依据 &#xff08;1&#xff09;管网老化区域管网 管网建设年代久远&#xff0c;通常管网发生破损问题较大&#xff0c;根据管网本身属性和历史发生事件的统计分析&#xff0c;结合数理统计&#xff0c;优先选择管网老化区域的管段所在区域进行…...

Linux驱动开发——字符设备(2)

目录 虚拟串口设备驱动 一个驱动支持多个设备 习题 虚拟串口设备驱动 字符设备驱动除了前面搭建好代码的框架外&#xff0c;接下来最重要的就是要实现特定于设备的操作方法&#xff0c;这是驱动的核心和关键所在&#xff0c;是一个驱动区别于其他驱动的本质所在&#xff0c;…...

【MySQL数据库原理】MySQL Community安装与配置

目录 安装成功之后查看版本验证1、介绍、安装与配置数据库2、操作MySQL数据库3、MySQL数据库原理安装成功之后查看版本验证 SELECT VERSION();查看mysql版本号 1、介绍、安装与配置数据库 下载安装包:https://download.csdn.net/download/weixin_41194129/87672588 MySQL…...

【ROS参数服务器增删改c++操作1】

需求:实现参数服务器参数的增删改查操作。 在C中实现参数服务器数据的增删改查&#xff0c;可以通过两套API实现:. ros::NodeHandle ros::param下面为具体操作演示&#xff1a; 在src下面的自己定义的作用包下面新建文件。 比如我的是一直存在的demo03_ws文件下的src里面&…...

elasticsearch 常用数据类型详解和范例

主要内容 elasticsearch 中的字符串&#xff08;keyword&#xff09;类型 的详解和范例 elasticsearch 中的字符串/文本&#xff08;text&#xff09;类型 的详解和范例 elasticsearch 中的数字&#xff08;数值&#xff09;类型 的详解和范例 elasticsearch 中的布尔&#…...

力扣119杨辉三角 II:代码实现 + 方法总结(数学规律法 记忆法/备忘录)

文章目录第一部分&#xff1a;题目第二部分&#xff1a;解法①-数学规律法2.1 规律分析2.2 代码实现2.3 需要思考第三部分&#xff1a;解法②-记忆法&#xff08;备忘录&#xff09;第四部分&#xff1a;对比总结第一部分&#xff1a;题目 &#x1f3e0; 链接&#xff1a;119.…...

安装pandas遇到No module named ‘_bz2’ 的解决方案

出现这个问题我们可以按照这篇博客去解决&#xff1a; https://blog.csdn.net/bf96163/article/details/128654915 如果解决不了&#xff0c;可以这样去做&#xff1a; 1.确保安装了 对应的库 // ubuntu安装命令 sudo apt-get install bzip2-devel // centos安装命令 sudo y…...

【数据治理-05】什么数据才是货真价实的数据资产,一起聊聊数据资产

在国家层面一些列文件、纲要、政策、办法等政府力量的推动下&#xff0c;数据资产这个词越来越频繁的出现在我们寻常工作当中&#xff0c;现在越来越觉得这个词被滥用&#xff0c;大有“一切数据皆是资产”的感觉&#xff0c;业务数据是资产、技术数据是资产&#xff0c;不能共…...

第三章 ARM处理器体系结构【嵌入式系统】

第三章 ARM处理器体系结构【嵌入式系统】前言推荐第三章 ARM处理器体系结构3.1 概述3.2 ARM处理器的结构3.7 ARM的异常中断处理最后前言 以下内容源自《【嵌入式系统】》 仅供学习交流使用 推荐 无 第三章 ARM处理器体系结构 留着占位 敬请期待 3.1 概述 3.2 ARM处理器的…...

最速下降法

首先&#xff0c;计算函数f的梯度向量&#xff1a;∇f(x1,x2)[2x150x2]\nabla f(x_1,x_2) \begin{bmatrix}2x_1\\50x_2\end{bmatrix}∇f(x1​,x2​)[2x1​50x2​​] 然后&#xff0c;选择一个初始点(x10,x20)(x_1^0,x_2^0)(x10​,x20​)&#xff0c;比如(0,0)(0,0)(0,0)。 接…...

R语言实践——ggplot2+ggrepel绘制散点+优化注释文本位置

简介 书接adjustText实践——调整matplotlib散点图标签&#xff0c;避免重复 上文中&#xff0c;matplotlibadjustText对于我的实例来说并没有起到很好的效果。所以&#xff0c;博主决定在R中利用gglot2ggrepel绘制&#xff0c;期待效果。 操作过程 博主不常使用R&#xff…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...