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

news2024/11/15 19:43:33

一、计算属性

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.coloradmin.cn/o/1630796.html

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

相关文章

jsp servlet 学生信息管理系统

一、角色划分 1、超级管理员 2、学生 二、模块展示 1、登录 2、列表页面【超级管理员展示所有用户信息、学生只展示当前登录用户信息】 3、新增 4、编辑 三、数据库【mysql】 四、运行演示 jsp servlet 学生信息管理系统

Django模型继承之多表继承

在Django模型继承中&#xff0c;支持的第二种模型继承方式是层次结构中的每个模型都是一个单独的模型。每个模型都指向分离的数据表&#xff0c;并且可以被独立查询和创建。在继承关系中&#xff0c;子类和父类之间通过一个自动创建的OneToOneField进行连接。示例代码如下&…

新闻稿的正文应该怎样写?纯干货

新闻稿作为传播信息的重要载体&#xff0c;正文的撰写至关重要。新闻稿的正文应该怎样写&#xff1f;伯乐网络传媒来给大家揭秘高质量新闻稿的写作结构与技巧&#xff01; 一、新闻稿正文的结构 1. 导语 a. 概括新闻事件的核心内容&#xff1a;导语是新闻稿的开篇&#xff0c;…

纯血鸿蒙APP实战开发——预渲染实现Web页面瞬开效果

介绍 为了便于大家在使用本案例集时能够更详细的了解各个案例&#xff0c;本案例基于Web预渲染实现了案例介绍功能&#xff0c;即应用右下角的问号icon。 效果图预览 使用说明 因为直接加载的线上README&#xff0c;因此本功能需联网使用点击icon&#xff0c;即会弹出对应案…

跟TED演讲学英文:The secret ingredient of business success by Pete Stavros

The secret ingredient of business success Link: https://www.ted.com/talks/pete_stavros_the_secret_ingredient_of_business_success? Speaker: Pete Stavros Date: April 2024 文章目录 The secret ingredient of business successIntroductionVocabularyTranscriptSu…

前端框架技术调研

目前程序员使用前端框架最多的是哪一个&#xff1f;

WCH RISC CH32V303RCT6 单片机的SDI Printf 虚拟串口功能 类似SEGGER RTT打印功能 简单分析

参考&#xff1a; 有关于 SDI printf 更多的信息和资料吗&#xff1f; 关于 CH32 系列 MCU SDI 虚拟串口功能的使用 【CH32X035 评估板测评】 教你使用 SDI 接口重定向 printf SDI (Serial Data Interface) 是沁恒微电子 RISC-V 内核的私有外设接口,CH32 RISC-V 系列目前提供了…

最佳WordPress外贸主题推荐(2024)

WordPress是一个非常受欢迎的建站平台&#xff0c;它具有易用性&#xff0c;并提供了许多功能强大的主题和插件。如果你计划建立一个外贸独立站商城&#xff0c;选择一个适合的WordPress外贸主题至关重要。以下是一些外贸主题应具备的特点&#xff1a; 1. 欧美风格&#xff1a…

一套JAVA语言开发的:危大工程智慧一体化工地系统源码,(后台管理端+APP+可视化大屏端)

智慧工地是指利用移动互联、物联网、智能算法、地理信息系统、大数据挖掘分析等信息技术&#xff0c;提高项目现场的“人•机•料•法•环•安”等施工要素信息化管理水平&#xff0c;实现工程施工可视化智能管理&#xff0c;并逐步实现绿色生态建造。 相关技术&#xff1a;微…

【MATLAB源码-第200期】基于matlab的鸡群优化算法(CSO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 鸡群优化算法&#xff08;Chicken Swarm Optimization&#xff0c;简称CSO&#xff09;是一种启发式搜索算法&#xff0c;它的设计灵感来源于鸡群的社会行为。这种算法由Xian-bing Meng等人于2014年提出&#xff0c;旨在解决…

【第 8 节】大模型微调数据构造(补充课程)

1 简介 视频课程 | 操作文档 | OpenDataLab 2 课程内容 2.1 大模型训练数据 2.2 微调 pretrain数据集 - 万卷 SFT 微调相关 TO-DO&#xff1a;2024.5左右会开源一个LLM标注工具。 密切关注opendatalab 2.3 微调数据构造 数据质量判断 tips&#xff1a; 弱智吧&#xff1a…

【论文】关于网页上能打开的文章下载PDF“显示无效或损坏的 PDF 文件”的解决办法

1. 遇到的问题 今天我在 dl.acm.org/doi 下载论文时发现下载后的pdf打开出现“显示无效或损坏的 PDF 文件” 可是在原网址是可以打开并显示的 2. 解决方案 这里我用到了和之前【论文】去除PDF论文行号的完美解决方案 的相似的解决办法 就是下载的时候不直接下载&#xf…

【兼职宝典】七大靠谱手机兼职副业平台,让你乐在其中,轻松实现财务自由!

数字化时代已经到来&#xff0c;互联网的普及与技术的飞速发展让越来越多的人开始关注兼职工作&#xff0c;以此增加收入、锻炼能力或追求兴趣爱好。本文将为您详细解读几种热门的兼职方式&#xff0c;助您找到最适合自己的兼职岗位。 一&#xff0c;自媒体运营&#xff1a;创…

python使用opencv对图像的基本操作(3)

17.颜色空间的转换 17.1.rgb图像转gray图像 from skimage import io,color img io.imread(lbxx.jpg) img_gray color.rgb2gray(img) #将rgb图像转换成gray图像 io.imshow(img_gray)运行结果&#xff1a; 17.2.rgb图像转hsv图像 from skimage import io,color img io.im…

Python多线程编程深度探索:从入门到实战

title: Python多线程编程深度探索&#xff1a;从入门到实战 date: 2024/4/28 18:57:17 updated: 2024/4/28 18:57:17 categories: 后端开发 tags: 多线程并发编程线程安全Python异步IO性能优化实战项目 第1章&#xff1a;Python基础知识与多线程概念 Python简介&#xff1a…

WPF 6 命令

命令 创建一个按钮&#xff0c;新建一个事件&#xff0c;按住F12 就可以添加业务代码 运行代码 此时希望UI与后台代码分离&#xff0c;互不影响 此时新建一个MainViewModel类&#xff0c;来保存业务代码 Icommand 是所有command的父类接口 新建一个command来实现这个接口…

怎么才能让数字在横线上缩小了数字还在横线上

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>刻度</title> </head> <style typ…

遇到软件测试职业瓶颈,如何突破

作为职场人&#xff0c;遇到发展瓶颈是在所难免的&#xff0c;无论是晋升受限、技能升级缓慢&#xff0c;还是工作激情的丢失&#xff0c;这些挑战都可能让人感到挫败。但是&#xff0c;积极应对&#xff0c;你就可能找到那扇通向新机遇的窗。 1. 自我评估 识别问题 是缺乏技…

武汉星起航:挂牌上海股权中心,开启资本新篇章助力跨境电商飞跃

2023年10月30日&#xff0c;武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示&#xff0c;标志着这家在跨境电商领域拥有卓越声誉的企业正式迈入了资本市场的大门。对于武汉星起航来说&#xff0c;这不仅是其发展历程中的一个重要里程碑&#xff0c;更是对其业务…

<计算机网络自顶向下> Internet Protocol(未完成)

互联网中的网络层 IP数据报格式 ver: 四个比特的版本号&#xff08;IPV4 0100, IPV6 0110&#xff09; headlen&#xff1a;head的长度&#xff08;头部长度字段&#xff08;IHL&#xff09;指定了头部的长度&#xff0c;以32位字&#xff08;4字节&#xff09;为单位计算。这…