Vue 中 计算属性与侦听属性的使用与介绍

Vue 中 计算属性与侦听属性的使用与介绍

计算属性 - computed

计算属性是一种特殊的属性,它依赖于其他属性,并返回一个新的值。当依赖的属性发生变化时,计算属性会重新求值。

计算属性的语法如下:

computed: {// 计算属性名: function() {//   // 计算属性的逻辑// }
}

计算属性的逻辑可以是一个函数,也可以是一个返回值的对象。

计算属性的优点是:

  1. 简化模板中的表达式
  2. 缓存计算结果,只有当依赖的属性发生变化时才重新计算
  3. 自动订阅依赖的属性,当依赖的属性发生变化时,自动更新计算属性的值

使用计算属性

new Vue({data: {firstName: 'John',lastName: 'Doe',age: 30},computed: {fullName: function() {return this.firstName + ' ' + this.lastName;},fullName2: () => {get() {return this.firstName + ' ' + this.lastName;},/*** 计算属性的 setter*/set(value) {const names = value.split(' ');this.firstName = names[0];this.lastName = names[1];}}birthday: function() {return new Date(Date.now() - this.age * 365 * 24 * 60 * 60 * 1000);}}
});

在上面的例子中,我们定义了三个计算属性:

  1. fullName:返回 firstNamelastName 两个属性的拼接结果
  2. fullName2:返回 firstNamelastName 两个属性的拼接结果,使用箭头函数定义
  3. birthday:返回 age 属性对应的生日日期,通过 Date 对象计算得到

我们可以在模板中使用这些计算属性:

<div id="app"><p>{{ fullName }}</p><p>{{ birthday }}</p><input type="text" v-model="fullName2" />
</div>

在上面的例子中,我们使用 {{ }} 语法在模板中输出了 fullNamebirthday 两个计算属性的值。

我们还使用 v-model 指令将 fullName2 计算属性绑定到输入框的 value 属性上,这样当用户输入内容时,fullName2 计算属性的值也会自动更新。

计算属性的注意事项

计算属性的依赖属性必须是响应式的,否则计算属性的值不会自动更新。

计算属性的值是惰性计算的,只有当它被访问时才会重新计算。

计算属性的值是缓存的,只有当依赖的属性发生变化时才会重新计算。

计算属性不能有自己的方法,只能依赖于其他属性的计算结果。

计算属性不能访问 this 上下文,只能访问依赖的属性。

计算属性不能使用异步操作,只能使用同步操作。

侦听属性 - watch

侦听属性是一种特殊的属性,它监听某个数据变化,并在变化时执行回调函数。

new Vue({data: {username: "John Doe",userinfo: {age: 30,gender: "male",},},watch: {// 监听数据的变化username: function (newVal, oldVal) {console.log("Username changed from" + oldVal + "to" + newVal);},// 也可以监听对象的属性变化"userinfo.age": function (newVal, oldVal) {console.log("Age changed from" + oldVal + "to" + newVal);},// 深度监听userinfo: {deep: true,handler: function (newVal, oldVal) {console.log("Userinfo changed from" + oldVal + "to" + newVal);},// 立即执行回调函数immediate: true},
});

在上面的例子中,我们定义了两个侦听属性:

  1. username:监听 username 属性的变化,并在变化时输出日志
  2. userinfo.age:监听 userinfo 对象中 age 属性的变化,并在变化时输出日志
  3. userinfo:监听 userinfo 对象本身的变化,并在变化时输出日志,使用 deep 选项开启深度监听

我们可以在模板中使用这些侦听属性:

<div id="app"><p>{{ username }}</p><p>{{ userinfo.age }}</p><p>{{ userinfo.gender }}</p>
</div>

在上面的例子中,我们使用 {{ }} 语法在模板中输出了 usernameuserinfo.age 两个侦听属性的值。

usernameuserinfo.age 属性发生变化时,会触发对应的侦听函数,并输出日志。

userinfo 对象发生变化时,会触发 deep 选项开启的侦听函数,并输出日志。

侦听属性的注意事项

侦听属性的依赖属性必须是响应式的,否则侦听属性的值不会自动更新。

侦听属性的值是惰性计算的,只有当它被访问时才会重新计算。

侦听属性的值是缓存的,只有当依赖的属性发生变化时才会重新计算。

侦听属性不能有自己的方法,只能依赖于其他属性的计算结果。

侦听属性不能访问 this 上下文,只能访问依赖的属性。

侦听属性不能使用异步操作,只能使用同步操作。

计算属性 vs 侦听属性

计算属性侦听属性
定义依赖其他属性,返回一个新的值监听某个数据变化,并在变化时执行回调函数
语法computed: { 计算属性名: function() { 计算属性的逻辑 } }watch: { 侦听属性名: function(newVal, oldVal) { 侦听属性的逻辑 } }
依赖属性必须是响应式的必须是响应式的
缓存只有当依赖的属性发生变化时才重新计算只有当依赖的属性发生变化时才重新计算
立即执行
异步
访问上下文不能访问 this 上下文不能访问 this 上下文
访问依赖属性不能访问依赖属性不能访问依赖属性
访问计算属性不能访问计算属性不能访问计算属性
访问数据不能访问数据不能访问数据

总结

  • 计算属性是一种特殊的属性,它依赖于其他属性,并返回一个新的值。
  • 计算属性的逻辑可以是一个函数,也可以是一个返回值的对象。
  • 计算属性的优点是:简化模板中的表达式、缓存计算结果、自动订阅依赖的属性。
  • 侦听属性是一种特殊的属性,它监听某个数据变化,并在变化时执行回调函数。
  • 侦听属性的优点是:简化模板中的代码、缓存计算结果、自动订阅依赖的属性。
  • 两种属性都可以定义在组件的选项中,但它们的用法和语法有所不同。

Vue3 中使用计算属性

Vue3 中,计算属性的语法发生了变化。

import { ref, computed } from "vue";const firstName = ref("John");
const lastName = ref("Doe");const fullName = computed(() => {return firstName.value + " " + lastName.value;
});const birthday = computed(() => {return new Date(Date.now() - age.value * 365 * 24 * 60 * 60 * 1000);
});

在上面的例子中,我们使用 ref 函数创建了 firstNamelastName 两个响应式变量。

然后,我们使用 computed 函数创建了 fullNamebirthday 两个计算属性。

Vue3 中使用侦听属性

Vue3 中,侦听属性的语法发生了变化。

import { ref, watch } from "vue";const username = ref("John Doe");
const userinfo = ref({age: 30,gender: "male",
});watch(username, (newVal, oldVal) => {console.log("Username changed from" + oldVal + "to" + newVal);
});watch(() => userinfo.value.age,(newVal, oldVal) => {console.log("Age changed from" + oldVal + "to" + newVal);}
);watch(userinfo,(newVal, oldVal) => {console.log("Userinfo changed from" + oldVal + "to" + newVal);},{deep: true,}
);

在上面的例子中,我们使用 ref 函数创建了 usernameuserinfo 两个响应式变量。

然后,我们使用 watch 函数创建了 usernameuserinfo.age 两个侦听属性。

watch 函数的第一个参数是侦听的属性,第二个参数是回调函数,第三个参数是选项。

选项中,deep 选项用来开启深度监听。

总结

  • Vue2 中,计算属性和侦听属性都是用来简化模板中的表达式、缓存计算结果、自动订阅依赖的属性。
  • Vue3 中,计算属性的语法发生了变化,使用 ref 函数创建响应式变量,使用 computed 函数创建计算属性。
  • Vue3 中,侦听属性的语法发生了变化,使用 ref 函数创建响应式变量,使用 watch 函数创建侦听属性。

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

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

相关文章

【数学建模】2024数学建模国赛经验分享

文章目录 一、关于我二、我的数模历程三、经验总结&#xff1a; 一、关于我 我的CSDN主页&#xff1a;https://gxdxyl.blog.csdn.net/ 2020年7月&#xff08;大二结束的暑假&#xff09;开始在CSDN写作&#xff1a; 阿里云博客专家&#xff1a; 接触的领域挺多的&#xff…

摩尔投票算法--169. 多数元素

169. 多数元素 普通方法-借助map计数 class Solution { public:int majorityElement(vector<int>& nums) {map<int,int> mp;for(int num :nums){mp[num];}for(auto &a :mp){if(a.second>nums.size()/2){return a.first;}}return 0;} }; 进阶&#xff…

【Linux】常用指令(中)(附带基础指令的详细讲解、Linux的一些附加知识)

文章目录 前言1. Linux基础常用指令1.1 通配符 "*"1.2 man指令&#xff08;重要&#xff09;1.2.1 man指令的语法 1.3 何为"指令"&#xff1f;(附带知识)1.4 echo指令1.5 cat指令1.6 Linux下一切皆文件&#xff01;1.6.1 ">" 输出重定向1.6.2…

【基础知识复习 - 随机练习题】

问题 1&#xff1a;在软件生命周期模型中&#xff0c;哪一个模型强调了开发过程的迭代性和反馈&#xff1f; A. 瀑布模型 B. V模型 C. 敏捷模型 D. 原型模型 答案&#xff1a;C. 敏捷模型 解析&#xff1a;敏捷模型强调迭代开发和反馈&#xff0c;允许在每个迭代周期中进行调…

浅谈C#之线程锁

一、基本介绍 锁是一种同步机制&#xff0c;用于控制多个线程对共享资源的访问。当一个线程获得了锁时&#xff0c;其他线程将被阻塞&#xff0c;直到该线程释放了锁。 在并发编程中&#xff0c;多个线程同时访问共享资源可能导致数据竞争和不确定的行为。锁可以确保在任意时刻…

springboot提升-多数据源配置

文章目录 1. 添加依赖2. 配置数据源示例配置&#xff1a; 3. 创建数据源 Bean4. 创建动态数据源5. 配置 MyBatis SqlSessionFactory6. 在业务代码中使用注意事项 在 Spring Boot 中配置 MyBatis 以支持多数据源涉及几个关键步骤&#xff0c;包括配置数据源、集成 MyBatis 以及动…

Qt篇——Qt使用C++获取Windows电脑上所有外接设备的名称、物理端口位置等信息

我之前有发过一篇文章《Qt篇——获取Windows系统上插入的串口设备的物理序号》&#xff0c;文章中主要获取的是插入的USB串口设备的物理序号&#xff1b;而本篇文章则进行拓展&#xff0c;可以获取所有外接设备的相关信息&#xff08;比如USB摄像头、USB蓝牙、USB网卡、其它一些…

Android 蓝牙三方和动态权限三方

记录一下最近用到的简单的框架 蓝牙 FastBle&#xff1a;Android BLE通信库的介绍与高级用法 - 简书 https://github.com/Jasonchenlijian/FastBle 动态权限: GitHub - googlesamples/easypermissions: Simplify Android M system permissions 位置权限举例,arrayOf中多…

Spring 源码解读:使用FactoryBean创建复杂对象的实现

引言 在Spring框架中&#xff0c;FactoryBean是一个特殊的Bean&#xff0c;它允许开发者通过实现FactoryBean接口来控制Bean的创建过程&#xff0c;特别适用于创建复杂对象。FactoryBean可以将复杂对象的创建逻辑与业务逻辑分离&#xff0c;提供更高的灵活性和可扩展性。在本篇…

分布式技术概览

文章目录 分布式技术1. 分布式数据库&#xff08;Distributed Databases&#xff09;2. 分布式文件系统&#xff08;Distributed File Systems&#xff09;3. 分布式哈希表&#xff08;Distributed Hash Tables, DHTs&#xff09;4. 分布式缓存&#xff08;Distributed Caching…

代码随想录打卡Day28

今天的题目还是感觉有难度&#xff0c;前三道题都想不出来思路&#xff0c;直接看讲解去了。。。贪心的难题真的好难想出来。 122.买卖股票的最佳时机II 这道题用贪心解很巧妙。涉及到一个数学技巧&#xff0c;从第i天买入&#xff0c;第j天卖出&#xff0c;所获得的利润为pr…

面试必问:Java 类加载过程

java 类加载过程主要分为加载、链接和初始化三个阶段&#xff0c;六个关键步骤&#xff1a;加载、验证、准备、解析、初始化。 加载阶段&#xff08;Loading&#xff09; 加载时类加载的第一个过程&#xff0c;在这个阶段&#xff0c;将完成以下三件事情&#xff1a; 1&#…

基于Springboot的鲜花销售网站的设计与实现

项目描述 这是一款基于Springboot的鲜花销售网站的系统 模块描述 鲜花销售系统 1、用户 登录 在线注册 浏览商品 鲜花搜索 订购商品 查询商品详情 水果分类查看 水果加购物车 下单结算 填写收货地址 2、管理员 登录 用户管理 商品管理 订单管理 账户管理 截图

项目经理应该学习pmp还是cspm?

职场竞争激烈&#xff0c;项目管理专业人才在各个行业中的作用越来越凸显出来。在23年之前&#xff0c;我国关于通用项目管理人才的培养更多依赖于国外的PMP认证&#xff0c;缺少自主的认证评价标准和体系。 为了弥补这一空缺&#xff0c;基于国内的项目管理发展需求&#xff…

西门子博途零基础学PLC必会的100个指令

#西门子##PLC##自动化##工业自动化##编程##电工##西门子PLC##工业##制造业##数字化##电气##工程师# 工控人加入PLC工业自动化精英社群 工控人加入PLC工业自动化精英社群

OpenMV——色块追踪

Python知识&#xff1a; 1.给Python的列表赋值&#xff1a; 定义一个元组时就是 元组a (1,2,…) 元组中可以只有一个元素&#xff0c;但是就必须要加一个 “ , ” 如 a (2,) 而列表的定义和元组类似&#xff0c;只是把()换成[]: #那么下面的colour_1 ~ 3属于元组&#xf…

(计算机网络)运输层

一.运输层的作用 运输层&#xff1a;负责将数据统一的交给网络层 实质&#xff1a;进程在通信 TCP&#xff08;有反馈&#xff09;UDP&#xff08;无反馈&#xff09; 二.复用和分用 三. TCP和UDP的特点和区别 进程号--不是固定的 端口号固定--mysql--3306 端口--通信的终点 …

苹果的“AI茅”之路只走了一半

今年苹果发布会最大的亮点&#xff0c;也许是和华为“撞档”&#xff0c;又或者是替腾讯“发布”新手游&#xff0c;但肯定不是iPhone 16。 9月10日&#xff0c;苹果秋季新品发布会与华为见非凡品牌盛典相继举行&#xff0c;iPhone 16系列也与HUAWEI Mate XT同日发布。 不过&…

传统CV算法——特征匹配算法

Brute-Force蛮力匹配 Brute-Force蛮力匹配是一种简单直接的模式识别方法&#xff0c;经常用于计算机视觉和数字图像处理领域中的特征匹配。该方法通过逐一比较目标图像中的所有特征点与源图像中的特征点来寻找最佳匹配。这种方法的主要步骤包括&#xff1a; 特征提取&#xff…

js中【微任务】和【宏任务】长篇解读

在 JavaScript 中&#xff0c;理解微任务&#xff08;microtasks)和宏任务 (macrotasks)是掌握异步编程和事件循环&#xff08;Event Loop&#xff09;机制的关键。这两个概念影响了代码的执行顺序&#xff0c;特别是在涉及异步操作&#xff08;如 setTimeout、Promise、async/…