Vue入门到关门之计算属性与监听属性

一、计算属性

1、什么是计算属性

计算属性是基于其它属性计算得出的属性,就像Python中的property,可以把方法/函数伪装成属性,在模板中可以像普通属性一样使用,但它们是基于响应式依赖进行缓存的。这意味着只有在依赖的响应式数据发生改变时,计算属性才会重新计算,否则会直接返回缓存的结果。

2、计算属性的特点

计算属性的主要作用是对数据进行处理和转换,以便在模板中进行展示或其他逻辑操作。相⽐于在模板中直接使用方法来处理数据,计算属性具有以下优势:

  • 缓存结果: 计算属性的值会被缓存起来,只有在依赖的数据发生变化时才会重新计算。这样可以避免不必要的重复计算,提高性能。
  • 响应式更新: 计算属性会自动追踪依赖的数据,当依赖的数据发生变化时,计算属性会自动重新计算,保持数据的实时性。
  • 依赖性:计算属性会自动追踪依赖关系,确保在依赖数据变化时重新计算。
  • 简化模板逻辑: 通过使用计算属性,可以将复杂的逻辑处理和转换操作放在计算属性中,简化模板中的代码,使模板更加清晰和易读。

3、计算属性的使用

(1)计算属性的定义方式

  • 基础定义方式
computed: {// 计算属性的名称propertyName: function() {// 计算属性的逻辑处理// 返回计算结果return result;}
}

(2)首字母变大写

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./JS/vue.js"></script><script src="./JS/axios.js"></script></head>
<body>
<div id="app"><h1>首字母变大写</h1>
<!--    <input type="text" v-model="name">-&ndash;&gt; {{name.substring(0, 1).toUpperCase() + name.substring(1)}}-->
<!--    <br>-->
<!--    <input type="text" v-model="name">-&ndash;&gt; {{getName()}}-->
<!--    <br>-->
<!--&lt;!&ndash;    当我执行下面的input框的时候,getName方法也在执行,这就不对了,所以这时候需要计算属性&ndash;&gt;-->
<!--只要页面发生变化,函数都会重新运算,但是计算属性中的属性只针对所依赖的东西发生变化,与其他东西无关--><!--    <input type="text" v-model="name1">-&ndash;&gt; {{name1}}--><br><input type="text" v-model="name">---> {{newName}}
</div>
</body>
<script>var vm = new Vue({el: '#app',data: {name: '',name1: ''},methods: {getName() {console.log('我执行了')return name.substring(0, 1).toUpperCase() + name.substring(1)}},computed: {newName() {return name.substring(0, 1).toUpperCase() + name.substring(1)}}})
</script>
</html>
  • 第一步,加载页面,普通函数和计算属性触发

在这里插入图片描述

  • 第二步,普通函数输入abc,触发三次,其他两个没有被触发

在这里插入图片描述

  • 第三步,普通输入框输入abc,普通函数触发了,计算属性并没有被触发

在这里插入图片描述

  • 第四步,计算属性输入abc,普通函数和计算属性都触发了

在这里插入图片描述

总结:当我执行普通的并没有调用函数的input框的时候,getName方法也执行了,这就不对了,所以这时候就需要使用计算属性。我们要知道只要页面发生变化,函数都会重新运算,但是计算属性中的属性只针对所依赖的东西发生变化,其他没有调用计算属性的不会对其造成影响。

(3)重写过滤案例

  • 通过计算属性重写过滤属性会使我们将代码写的更简单
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./JS/vue.js"></script>
</head>
<body>
<div id="app"><h2>过滤案例</h2><input type="text" v-model="search" ><ul><li v-for="item in newDataList">{{item}}</li></ul>
</div>
</body>
<script>var vm = new Vue({el: '#app',data: {search: '',dataList: ['a', 'ac', 'bdsfc', 'ffaw', 'casdad', 'atnefk', 'fwead', 'fewfe'],},computed: {newDataList(){return this.dataList.filter(item => item.indexOf(this.search) >= 0)}}})
</script>
</html>

二、监听属性(侦听器)

1、什么是监听属性

监听属性是Vue中的⼀种特殊属性,用于监测数据的变化并触发相应的回调函数。通过监听属性,我们可以在数据发生改变时执行一些额外的逻辑操作。

2、监听属性的特点

监听属性的作用是在数据发生变化时,执行一些操作或触发其他的逻辑。它可以用于响应数据的变化并进行相应的处理,比如数据的验证、异步操作、触发其他组件的更新等。

  • 更灵活:与计算属性不同,监听属性更适用于执行异步操作或需要更多控制的情况。
  • 侦听任何数据变化:你可以监听任何数据的变化,而不仅限于计算属性所依赖的数据。

3、监听属性的使用

(1)监听属性的定义方式

在watch对象中,可以定义多个属性的监听器,每个属性对应一个回调函数。当被监听的属性发生变化时,Vue会自动调用对应的回调函数,并传递新值和旧值作为参数。

  • 监听对象定义方式
watch: {// 监听firstName属性变化firstName: function (newVal, oldVal) {// 在这里执行相关的操作},// 监听lastName属性变化lastName: function (newVal, oldVal) {// 在这里执行相关的操作}
}
  • 监听数组定义方式
watch: {['firstName', 'lastName']: function (newVal, oldVal) {// 在这里执行相关的操作}
}
  • 无论是对象语法还是数组语法,处理函数都接收两个参数:新值(newVal)和旧值(oldVal)。
  • 我们可以在处理函数中访问这两个值,并根据需要执行相应的操作。
  • 通过使用watch属性,我们可以轻松地监听Vue实例中数据的变化,从而执行一些特定的操作,例如发送请求、更新页面内容等。

(2)示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./JS/vue.js"></script><script src="./JS/axios.js"></script><style>.item{width: 150px;height: 50px;background-color: red;font-size: 25px;margin: 10px;display: flex;justify-content: center;align-content: center;}.top{display: flex;justify-content: center;}</style>
</head>
<body>
<div id="app"><h1>监听属性</h1><div class="top"><div class="item" @click="course_type='java'"><span>java</span></div><div class="item" @click="course_type='python'"><span>python</span></div><div class="item" @click="course_type='go'"><span>go</span></div></div><div>内容部分:{{content}}</div>
</div>
</body>
<script>var vm = new Vue({el: '#app',data: {content:'java',course_type:'java'},watch:{course_type(newValue,oldValue){console.log(newValue,oldValue)this.content = 'niubi'+this.course_type+'666'}}})
</script>
</html>

三、computed和watch的区别

在Vue.js中,计算属性(Computed Properties)和侦听器(Watchers)是用来处理数据响应式更新的两个重要工具,它们之间存在一些明显的区别:

  1. 计算属性

    • 基于Vue实例的数据状态计算得出的属性。
    • 会根据依赖的数据发生变化而变化,但只有在依赖数据发生改变时才会重新计算。
    • 具有缓存特性,只有在依赖发生变化时才会重新计算,否则会返回之前缓存的结果。
    • 适合处理简单的逻辑计算,避免模板过于臃肿。
    • 用于根据多个响应式数据计算出一个新的值。
  2. 侦听器

    • 允许在数据变化时执行异步或开销较大的操作。
    • 更通用,适合执行异步操作或执行较为复杂的操作。
    • 可以监听任何数据的变化,而不仅限于计算属性依赖的数据。
    • 用于监听某个数据的变化并做出相应的处理,或者在需要执行异步操作或开销较大的操作时使用。

但只有在依赖数据发生改变时才会重新计算。

  • 具有缓存特性,只有在依赖发生变化时才会重新计算,否则会返回之前缓存的结果。
  • 适合处理简单的逻辑计算,避免模板过于臃肿。
  • 用于根据多个响应式数据计算出一个新的值。
  1. 侦听器
    • 允许在数据变化时执行异步或开销较大的操作。
    • 更通用,适合执行异步操作或执行较为复杂的操作。
    • 可以监听任何数据的变化,而不仅限于计算属性依赖的数据。
    • 用于监听某个数据的变化并做出相应的处理,或者在需要执行异步操作或开销较大的操作时使用。

总的来说,计算属性适合处理简单的逻辑计算,具有缓存特性,适用于基于响应式数据生成的属性;而侦听器更适合处理更复杂的逻辑,可以监听任何数据的变化并执行相应的操作,适用于需要执行异步操作或开销较大的操作的场景。

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

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

相关文章

Mysql 存在多条数据,按时间取最新的那一组数据

1、数据如下&#xff0c;获取每个用户最近的一次登录数据 思路1&#xff1a;order by group by 先根据UserIdLogInTime排序&#xff0c;再利用Group分组&#xff0c;即可得到每个User_Id的最新数据。 1 SELECT * FROM login_db l ORDER BY l.user_id, l.login_time DESC; 排…

基于车载点云数据的城市道路特征目标提取与三维重构

作者&#xff1a;邓宇彤&#xff0c;李峰&#xff0c;周思齐等 来源&#xff1a;《北京工业大学学报》 编辑&#xff1a;东岸因为一点人工一点智能公众号 基于车载点云数据的城市道路特征目标提取与三维重构本研究旨在弥补现有研究在处理复杂环境和大数据量上的不足&#xf…

MFC实现ini配置文件的读取

MFC实现 ini 配置文件的读取1 实现的功能&#xff1a;点击导入配置文件按钮可以在旁边编辑框中显示配置文件的路径&#xff0c;以及在下面的编辑框中显示配置文件的内容。 1. 显示配置文件内容的编辑框设置 对于显示配置文件内容的 Edit Contorl 编辑框的属性设置如下&#x…

绘唐3怎么联系团长299矩阵反推模块使用说明

反推配置说明看这里:团长https://qvfbz6lhqnd.feishu.cn/wiki/D3YLwmIzmivZ7BkDij6coVcbn7W MJ配置说明 如上图 选择公有云,即可体验

Linux计划任务书以及定时任务的编写

一、程序可以通过两种方式执行&#xff1a; 手动执行利用调度任务&#xff0c;依据一定的条件自动执行 自动执行可通过一下两个命令来实现: &#xff08;1&#xff09;At &#xff08;单一工作调度&#xff09; &#xff08;2&#xff09;Cron &#xff08;循环工作调度&a…

求三个字符数组最大者(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <string.h>int main() {//初始化变量值&#xff1b;int i 0;char str[3][20];char string[20];//循环输入3个字符…

Selenium的四种部署方式

关于selenium 的部署&#xff0c;我在网上找了很多&#xff0c;基本上都没有提到或是说的比较清晰的。当时我一直有个困惑&#xff1a;测试的脚本代码&#xff0c;是放在跟浏览器同一台机器上呢&#xff0c;还是放在Application Server上&#xff1f; 在官方开发文档中&#x…

蛋糕购物商城

蛋糕购物商城 运行前附加数据库.mdf&#xff08;或使用sql生成数据库&#xff09; 登陆账号&#xff1a;admin 密码&#xff1a;123456 修改专辑价格时去掉&#xffe5;以及上传专辑图片 c#_asp.net 蛋糕购物商城 网上商城 三层架构 在线购物网站&#xff0c;电子商务系统 …

Kubernetes中文件挂载的四种方式

一. Kubernetes入门 1.1 Kubernetes创建POD过程 1.2. Kubernetes基本操作 命令说明用法create创建kubectl create -f xx.yamledit编辑kubectl edit svc [POD的service名称]get获取kubectl get pod --namespaceXXXpatch更新kubectl patch -f xx.yamldelete删除kubectl delete …

AWTK 开源串口屏开发(17) - 通过 MODBUS 访问数组数据

在 AWTK 串口屏中&#xff0c;内置了 MODBUS Client Channel 的模型&#xff0c;不用编写代码即可实现在 ListView 中显示数组数据。 MODBUS 协议一次只能读取 125 个 WORD&#xff0c;AWTK-MODBUS Client Channel 支持长数据&#xff0c;自动分成多个请求访问。 1. 功能 不用…

【后端】Thymeleaf模板引擎学习笔记

文章目录 1. java体系模板引擎介绍2. 使用2.1 初步使用2.2. 引用静态资源模板2.3 引用静态资源模板(配置资源路径和后缀)2.4 整合springboot 视频地址 1. java体系模板引擎介绍 FreeMarkerThymeleafVelocity 2. 使用 2.1 初步使用 引入依赖 <dependency><groupId>…

C++学习随笔(11)——vector

本章我们来学习一下vector&#xff01; 目录 1.vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vector 增删查改 1.2.5 vector 迭代器失效问题。 1.vector的介绍及使用 1…

selenium 自动化测试课上实操指南2——乐视tv搜索

如果完成了实操1的同学&#xff0c;环境搭建已经ok&#xff0c;环境还没有好的同学请参考 实操1_百度搜索 为了大家顺利&#xff0c;我们还想按照实操1那样&#xff0c;先导入一个基本项目。在次基础上进行代码编写、 我们一起写写看。 1.打开乐视视频网页并最大化 如下图所…

三款数据可视化工具深度解析:Tableau、ECharts与山海鲸可视化

在数字化时代&#xff0c;数据可视化工具成为了企业和个人进行数据分析和决策的重要助手。市面上众多数据可视化工具各具特色&#xff0c;本文将为您介绍三款热门的数据可视化工具&#xff0c;帮助您更好地理解和利用数据。 首先&#xff0c;让我们来认识Tableau。Tableau是一款…

matlab学习006-使用matlab绘出系统的冲激响应和阶跃响应波形并求其冲激响应的数值解

目录 题目 1&#xff0c;绘出系统的冲激响应和阶跃响应波形 1&#xff09;基础 2&#xff09;效果 3&#xff09;代码 2&#xff0c;求出t0.5s,1s,1.5s,2s时系统冲激响应的数值解。 1&#xff09;基础 2&#xff09;效果 ​☀ 3&#xff09;代码 题目 已知描述某连续系…

《苍穹外卖》Day07部分知识点记录

一、菜品缓存 减少查询数据库的次数&#xff0c;优化性能 客户端&#xff1a; package com.sky.controller.user;import com.sky.constant.StatusConstant; import com.sky.entity.Dish; import com.sky.result.Result; import com.sky.service.DishService; import com.sky…

网络安全实训Day16

网络空间安全实训-渗透测试 漏洞扫描 定义 扫描和探测目标范围内的主机存在哪些安全漏洞&#xff0c;或扫描目标范围内的那些主机存在某个指定的漏洞 漏扫工具 AWVS APPScan MSF 使用MSF扫描漏洞并利用 1.搜索需要的攻击模块 search ms17-010 2.使用攻击模块 use 模块名称…

苏州相融大厦安装部署火眼视频图像早期火灾报警系统

2024年3月&#xff0c;苏州高铁数金公司、火眼消防技术有限公司与招商积余物业联合在相融大厦进行了火眼视频图像早期火灾报警系统的部署和测试工作&#xff0c;测试效果良好。体现招商积余对持续推进消防安全工作的高度重视。 相融大厦是火眼消防总部注册和苏州研发中心所在地…

OpenCV直方图计算

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV实现直方图均衡 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::split 将图像划分…