Vue——计算属性

文章目录

    • 计算属性
      • computed 计算属性 vs methods 方法
      • 计算属性完整写法
    • 综合案例:成绩案例

计算属性

概念:基于现有的数据,计算出来的新属性。依赖的数据变化,自动重新计算
语法:
①声明computed配置项中,一个计算属性对应一个函数
②使用起来和普通属性一样使用{{ 计算属性名 }}
(平时声明属性是往data中放的,现在要往对应的computed中放👇)

<script>
	computed:{
		计算属性名 () {
			基于现有数据,编写求职逻辑
		return 结果
		}
</script>

计算属性 → 可以将一段求值的代码进行封装(所以写的时候千万不要忘记return

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <h3>物品清单</h3>
        <table>
            <tr>
                <th>名字</th>
                <th>数量</th>
            </tr>
            <tr v-for="(item,index) in list" :key="item.id">
                <td>{{ item.name }}</td>
                <td>{{ item.num }}</td>
            </tr>
        </table>

        <p>礼物总数 {{ totalCount }}个</p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                //现有数据
                list:[
                    {id:1,name:'篮球',num:1},
                    {id:2,name:'玩具',num:2},
                    {id:3,name:'铅笔',num:5},
                ]
            },
            computed:{
                totalCount(){
                    //基于现有的数据,编写求职逻辑
                    //计算属性函数内部,可以直接通过this 访问到 app 实例
                    //需求:对 this.list 数组里面的 num 进行求和 → reduce
                   let total = this.list.reduce((sum,item) => sum+item.num,0)// 0 是求和的起始值,会先给到sum 
                    return total
                }
            }
        })
    </script>
</body>
</html>

computed 计算属性 vs methods 方法

(1)computed 计算属性
作用:封装了一段对于数据的处理,求得一个结果
语法
①写在computed配置项中
②作为属性,直接使用 → this.计算属性 {{ 计算属性 }}

缓存特性(提升性能)👇
计算属性会对计算出来的结果缓存,再次使用直接读取缓存,依赖项变化了,会自动重新计算 → 并再次缓存

(2)methods方法
作用:给实例提供一个方法,调用以处理业务逻辑
语法
①写在methods配置项中
②作为方法,需要调用 → this.方法名 {{ 方法名( ) }} (因为是方法,所以用起来是要调用的)
除非配合着事件,相当于帮你调用 → @事件名=“方法名”
在这里插入图片描述

用方法:
methods:{
	totalCountFn () {
		console.log('methods方法执行了')
		let total = this.list.reduce((sum,item) => sum+item.num,0)
        return total
    }
}

算完一个又算一次,是没有缓存的
在这里插入图片描述

计算属性完整写法

Q:上一点我们是访问计算属性,那么应该也能修改了?
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        姓:<input type="text" v-model="firstName">+
        名:<input type="text" v-model="lastName">=
        <span>{{ fullName }}</span>

        <button @click="changeName">改名卡</button>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                firstName:'刘',
                lastName:'备',
            },
            methods:{
                changeName(){
                    this.fullName='周心悦'//会传给我们当前 set 方法的形参:value
                }
            },
            computed:{
                //简写 → 获取,没有配置设置的逻辑
                //fullName(){
                //    return this.firstName  + this.lastName
                //}

                //完整写法 → 获取 + 设置
                fullName:{
                    //(1)当fullName计算属性,被获取求值时,执行get(有缓存)
                    //   会将返回值作为求值的结果
                    get (){
                        return this.firstName + this.lastName
                    },
                    //(2)当fullName计算属性,被修改赋值时,执行set
                    //     修改的值,传递给set方法的形参
                    set (value){
                        //改名卡的用法时,把输入的姓名拆分,分别给“姓”和“名”
                        this.firstName=value.slice(0,1)
                        this.lastName=value.slice(1)
                    }
                }
            }
        })
    </script>
</body>
</html>

综合案例:成绩案例

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <div class="table">
            <table>
                <thead>

                </thead>

                <tbody v-if="list.length > 0">
                    <tr v-for="(item,index) in list" :key="item.id">
                        <td>{{ index +1 }}</td><!-- 为保证序号连续,推荐使用index -->
                        <td>{{ item.subject }}</td>
                        <!-- 需求:不及格的要标红,及<60,加上red类 -->
                        <td :class="{ red:item.score<60 }">{{ item.score }}</td>
                        <td><a @click.prenvet="del(item.id)" href="#">删除</a></td>
                    </tr>

                </tbody>

                <tbody v-else>
                    <tr>
                        <td colspan="5">
                            <span class="none">暂无数据</span>
                        </td>
                    </tr>
                </tbody>

                <tfoot>
                    <tr>
                        <td colspan="5">
                            <span>总分:{{ totalScore }}</span>
                            <span style="margin-left: 50px;">平均分:{{ averageScore }}</span>
                        </td>
                    </tr>
                </tfoot>
            </table>

        </div>
        <div class="form">
            <div class="form-item">
                <div class="label">科目:</div>
                <div class="input">
                    <input type="text" placeholder="请输入科目" v-model.trim="subject">
                </div>
            </div>
            <div class="form-item">
                <div class="label">分数</div>
                <div class="input">
                    <input type="text" placeholder="请输入分数" v-model.number="score">
                </div>
            </div>
            <div class="form-item">
                <div class="label"></div>
                <div class="input">
                    <button @click="add" class="submit">添加</button>
                </div>
            </div>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                list:[
                    { id: 1,subject:'语文', score:20},
                    { id: 7,subject:'数学', score:90},
                    { id: 12,subject:'英语', score:70},
                ],
                subject:'',
                score:''
            },
            computed:{
                totalScore(){
                    return this.list.reduce((sum,item) => sum + item.score,0)
                },
                averageScore (){
                    if(this.list.length === 0){
                        return 0
                    }
                    return (this.totalScore/this.list.length).toFixed(2)
                }
            },
            methods:{
                del(id){
                    //相同的移出,不相同的保留
                    this.list = this.list.filter(item =>item.id !== id)
                },
                add(){
                    if(!this.subject){
                        alert('请输入科目')
                        return
                    }
                    if(typeof this.score !== 'number'){
                        alert('请输入正确的成绩')
                        return
                    }
                    //往前面加
                    this.list.unshift({
                        id: +new Date(),
                        subject:this.subject,
                        score:this.score
                    })

                    this.subject=''
                    this.score=''
                }
            }
        })
    </script>
</body>
</html>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

stable diffuison的安装和使用

stable diffuison的安装和使用 简单介绍 Stable Diffusion是一个深度学习文本到图像的生成模型&#xff0c;它可以根据文本描述生成详细的图像。这个模型主要应用于文本生成图像的场景中&#xff0c;通过给定的文本提示词&#xff0c;模型会输出一张与提示词相匹配的图片。 S…

C++提高编程---模板---类模板

目录 一、类模板 1.模板 2.类模板的作用 3.语法 4.声明 二、类模板和函数模板的区别 三、类模板中成员函数的创建时机 四、类模板对象做函数参数 五、类模板与继承 六、类模板成员函数类外实现 七、类模板分文件编写 八、类模板与友元 九、类模板案例 一、类模板 …

HTML CSS 发光字头特效

效果展示&#xff1a; 代码&#xff1a; <html><head> </head><style>*{margin: 0;padding: 0;}body {text-align: center;}h1{/* border: 3px solid rgb(201, 201, 201); */margin-bottom: 20px;}.hcqFont {position: relative;letter-spacing: 0.07…

数据结构【DS】Ch8 排序

文章目录 插入排序选择排序归并&基数外部排序 插入排序 交换排序 选择排序 归并&基数 外部排序

电脑可以连接wifi,甚至可以qq聊天,但就是不能用浏览器上网,一直显示未检测出入户网线的解决方案

今天回到家&#xff0c;准备办公却发现电脑可以连接wifi&#xff0c;甚至可以qq聊天&#xff0c;但就是不能用浏览器上网&#xff0c;一直显示未检测出入户网线的解决方案&#xff0c;小白也可以看懂 以下有几种解决方案&#xff0c;不妨都试试&#xff0c;估计可以解决95%的相…

【C语言基础篇】结构控制(下)转向语句break、continue、goto、return

文章目录 一、break语句 1. break在 while 循环中 2. break在 for 循环中 3. break在 do…while 循环中 4. break在 switch 语句中 5. break 总结 二、continue语句 1. continue在 while 循环中 2. continue在 for 循环中 3. continue在 do...while 循环中 4. con…

PY调包侠——Collections高效库

一、【写在前面】 PY是一个调包侠语言&#xff0c;多学一个库可以提高计算速度。Collections提供了各种数据类型和集合工具&#xff0c;可以很方便的处理各种数据结构。如果您有刷力扣的习惯&#xff0c;可以经常看到Collections和itertools的身影&#xff0c;经常用这两个可以…

【数据结构】二叉树相关oj题(一)

目录 1、二叉树的构建及遍历 1.1、题目介绍 1.2、解题思路 1.3、代码描述 1.4、完整代码 2、二叉树的层次遍历 2.1、题目介绍 2.2、解题思路 2.3、代码描述 2.4、完整代码 1、二叉树的构建及遍历 1.1、题目介绍 原题链接&#xff1a;KY11 二叉树构建及遍历_牛客题霸…

ElasticSearch 7.x现网运行问题汇集1

问题描述&#xff1a; 现网ElasticSearch health状态变为red&#xff0c;有分片无法assign。如下摘录explain的结果部分&#xff1a; "note": "No shard was specified in the explain API request, so this response explains a randomly chosen unassigned s…

docker 部署 sentinel

docker 部署 sentinel 环境安装 拉取镜像 目前稳定的版本是1.8.0 docker pull bladex/sentinel-dashboard:1.8.0启动服务 docker run --name sentinel -p 8858:8858 -td bladex/sentinel-dashboard:1.8.0登录 登录的时候账号和密码都是sentinel

openGauss学习笔记-203 openGauss 数据库运维-常见故障定位案例-修改索引时只调用索引名提示索引不存在

文章目录 openGauss学习笔记-203 openGauss 数据库运维-常见故障定位案例-修改索引时只调用索引名提示索引不存在203.1 修改索引时只调用索引名提示索引不存在203.1.1 问题现象203.1.2 原因分析203.1.3 处理办法 openGauss学习笔记-203 openGauss 数据库运维-常见故障定位案例-…

modelscope下载模型

# 私有模型下载&#xff0c;前提是您有响应模型权限 方法1 git lfs install git clone http://oauth2:your_git_tokenwww.modelscope.cn/<namespace>/<model-name>.git 如何获取git token 用您的账号登录https://www.modelscope.cn &#xff0c;在个人中心->访…

【学习iOS高质量开发】——对象、消息、运行期

文章目录 一、理解“属性”这一概念1.如何定义实例变量2.什么是不兼容现象&#xff0c;如何解决3.理解property关键字4.理解dynamic关键字5.属性特质1.原子性&#xff1a;2.读/写权限&#xff1a;3.内存管理语义 7.要点 二、在对象内部尽量直接访问实例变量1.直接访问和属性访问…

[网络编程]UDP协议,基于UDP协议的回显服务器

目录 1.UDP协议介绍 2.UDP协议在Java中的类 2.1DatagramSocket类 2.2DatagramPacket 3.回显服务器 3.1Sever端 3.2Client端 1.UDP协议介绍 UDP协议是一种网络协议&#xff0c;它是无连接的&#xff0c;全双工&#xff0c;并且是面向数据报&#xff0c;不可靠的一种协议…

交友盲盒小程序版本 全开源版本-YISHEN源码网

这个小程序是云开发的不需要服务器域名 支持流量主wx支付。超级能吸引年轻人的一款小程序 版本新增&#xff1a; 1.Ui美化 2.星座匹配&#xff08;通过星座进行盲盒&#xff09; 3.后台管理&#xff08;可以实时看到用户数量&#xff09; 4.支付S I P 9功能&#xff08;后…

vue3-模版引用ref

1. 介绍 概念&#xff1a;通过 ref标识 获取真实的 dom对象或者组件实例对象 2. 基本使用 实现步骤&#xff1a; 调用ref函数生成一个ref对象 通过ref标识绑定ref对象到标签 代码如下&#xff1a; 父组件&#xff1a; <script setup> import { onMounted, ref } …

React、vue、h5端项目避免缓存

前言&#xff1a; h5项目和pc端项目上线时&#xff0c;有时只有细微的改变&#xff0c;但是部署完后&#xff0c;再次访问却是没变化。必须清除缓存才行。 pc端项目手动清除一下还行&#xff0c;但是h5项目却不行。尤其 嵌套在app里&#xff0c;只能 清除 app的缓存&#xff0…

数据库(表的基本操作)

目录 1.1 表的基本操作 1.1.1 创建表 1.1.2 表物理存储结构 1.1.3 数据类型 文本类型&#xff1a; 数字类型&#xff1a; 时间/日期类型&#xff1a; 常用的数据类型&#xff1a; 1.1.4 查看表 SHOW 命令 查看表结构&#xff1a; 1.1.5 删除表 查看表结构&#xf…

TCP服务器的演变过程:C++使用libevent库开发服务器程序

C使用libevent库开发服务器程序 一、引言二、libevent简介三、Libevent库的封装层级3.1、reactor对象封装struct event_base3.2、事件对象struct event3.3、struct bufferevent对象3.4、evconnlistener对象3.5、事件循环3.6、事件处理 四、完整示例代码小结 一、引言 手把手教…

论文精读--ResNet

ResNet论文 撑起计算机视觉半边天的ResNet【论文精读】_哔哩哔哩_bilibili Abstract Deeper neural networks are more difficult to train. We present a residual learning framework to ease the training of networks that are substantially deeper than those used pre…