Vue的计算属性:methods方法、computed计算属性、watch监听属性

1、methods 方法

在创建的 Vue 应用程序实例中,可以通过 methods 选项定义方法。应用程序实例本身会代理 methods 选项中的所有方法,因此可以像访问 data 数据那样来调用方法。

【实例】在 Vue 应用程序中,使用 methods 选项定义获取用户信息方法和乘法计算方法。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="author" content="pan_junbiao的博客"><title>Vue实例</title>
</head><body><div id="app"><p>用户ID:{{userInfo.userId}}</p><p>用户名称:{{userInfo.userName}}</p><p>博客信息:{{userInfo.blogName}}</p><p>博客地址:{{userInfo.blogUrl}}</p><p>{{num1}} 乘以 {{num2}} 的结果:{{ multiplicine(num1, num2) }}</p></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {userInfo: {}, //定义用户对象num1: 20,num2: 40}},//初始化的入口created: function () {//调用方法:获取用户信息this.getUserInfo();},//方法methods: {//获取用户信息getUserInfo: function () {this.userInfo = {userId: 1,userName: "pan_junbiao的博客",blogName: "您好,欢迎访问 pan_junbiao的博客",blogUrl: "https://blog.csdn.net/pan_junbiao"}},//乘法计算multiplicine: function (a, b) {return a * b;}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app'); 
</script></html>

执行结果:

2、computed 计算属性

在模板中绑定表达式只能用于简单的运算。如果运算比较复杂,可以使用 Vue.js 提供的计算属性,通过计算属性可以处理比较复杂的逻辑。

2.1 计算属性的应用

通过计算属性可以实现各种复杂的逻辑,包括运算、函数调用等,只要最后返回一个计算结果就可以。当计算属性依赖的数据发生变化时,计算属性的值会自动更新,所有依赖该计算属性的数据绑定也会同步进行更新。

【实例】使用 computed 计算属性,实现每个单词首字母大写。

<body><div id="app"><p>原字符串:{{str}}</p><p>新字符串:{{newstr}}</p></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {str:"my heart will go on"}},//计算属性computed: {//首字母大写newstr: function(){let arr = this.str.split(' ');for(let i = 0; i < arr.length; i++){arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substr(1).toLowerCase();}return arr.join(' ');}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app'); 
</script>

执行结果:

2.2 计算属性的 getter 和 setter

每一个计算属性都包含一个 getter 和一个 setter。getter 只要用来读取值,而 setter 主要用来设置值。getter 主要用来读取值,而 setter 主要用来设置值。当手动更新计算属性的值时,就会触发 setter,执行一些自定义的操作。

【实例】使用 计算属性的 getter 和 setter,重新设置人物姓名。

<body><div id="app"><p>人物名称:{{fullname}}</p></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {surname: 'Jim',lastname: 'Carrey'}},//计算属性computed: {fullname: {// getterget() {return this.surname + ' ' + this.lastname;},// setterset(value) {let names = value.split(' ');this.surname = names[0];this.lastname = names[1];}}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app');//重新设置人物名称vueApp.fullname = 'Will Smith';
</script>

执行结果:

2.3 methods 与 computed 的区别

问:Vue 中的 methods 方法与 computed 计算属性有什么区别?

答:主要区别是 methods 方法会实时计算,而 computed 计算属性是使用缓存数据。

将相同的操作定义为一个方法,或者定义为一个计算属性,两种方式的结果完全相同。那么为什么还需要计算属性呢?因为计算属性是基于它们的依赖进行缓存的。当页面重新渲染时,如果依赖的数据未发生改变,使用计算属性获取的值就是一直是缓存值。只有依赖的数据发生改变时才会重新获取值。如果使用的是方法,在页面重新渲染时,方法中的函数总会被重新调用。

详情请浏览本博客的文章:《Vue中的methods方法与computed计算属性的区别》

3、watch 监听属性

监听属性是 Vue.js 提供的一种用来监听和响应数据变化的方式。在 监听 data 选项中的属性时,如果监听的属性发生变化,就会执行特定的操作。

3.1 监听属性的使用

监听属性可以定义在 watch 选项中。监听属性对应的函数可以接收一个或两个参数。如果只有一个参数,则该参数表示监听属性的新值;如果有两个参数,第一个参数表示监听属性的新值,第二个参数表示监听属性的原值。

【实例】在 watch 选项中定义监听属性,输出属性的原值和新值。

<body><div id="app"><p>商品名称:{{name}}</p><p>{{text}}</p></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {name: '华为手机',price: 6999,text: ''}},//监听watch: {price(newValue, oldValue) {this.text = `原价格:${oldValue}元,新价格:${newValue}元`;}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app');//修改属性值vueApp.price = 3999;
</script>

执行结果:

3.2 监听属性的应用场景

监听属性通常用来实现数据之间的换算,如长度单位之间的换算、速度单位之间的换算、汇率之间的换算等。

【实例】使用 watch 监听属性,实现速度单位之间的换算。

<body><div id="app"><label for="meter">米/秒:</label><input id="meter" type="number" v-model="meter"><p><label for="kilometer">千米/小时:</label><input id="kilometer" type="number" v-model="kilometer"><p>{{meter}}米/秒={{kilometer}}千米/小时</div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {meter : 0,kilometer : 0}},//监听watch : {meter : function(val){this.kilometer = val * 3600 / 1000;},kilometer : function(val){this.meter = val * 1000 / 3600;}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app');
</script>

执行结果:

3.3 监听对象

如果要监听的属性值是一个对象,要想监听对象内部值的变化,需要在监听属性的选项参数中设置 deep 选项的值为 true。

【实例】使用 watch 监听属性,监听对象的属性。

<body><div id="app"></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {userInfo: {userId: 1,userName: "pan_junbiao的博客",blogName: "您好,欢迎访问 pan_junbiao的博客",blogUrl: "https://blog.csdn.net/pan_junbiao",position: '前端工程师'}}},//监听watch : {userInfo:{handler: function(newValue){alert(`用户名称:${newValue.userName}\n新的职位:${newValue.position}\n博客信息:${newValue.blogName}\n博客地址:${newValue.blogUrl}`);},deep: true //重点代码}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app');//修改对象中的属性值vueApp.userInfo.position = "Java工程师";
</script>

执行结果:

注意:

当监听的数据是一个数组或者对象时,回调函数中的新值和旧值是相等的,因为这两个形参指向的是同一个数据对象。

3.4 computed 与 watch 的比较

computed 计算属性与 watch 监听属性的比较:

简体属性是 Vue.js 提供的一种用于监测和响应数据变化的更通用的方式。但是,使用监听属性的方式编写的代码是命令式的重复代码,所以在一般情况中,更好的做法是使用计算属性而不是命令式的监听属性。

4、filters 过滤器

关于 Vue.js 中的 filters 过滤器:从 Vue 3.0 版本开始,已被删除。Vue 3.0 为了精简与优化代码,删除了 filters 过滤器,因为 methods 方法和 computed 计算属性也能够实现 filters 过滤器的功能。

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

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

相关文章

实验16:定时器中断实验

无硬件图&#xff0c;用到D1灯 代码main.c #include<reg52.h>typedef unsigned int u16; typedef unsigned char u8;sbit LED1P2^0;void delay_10us(u16 n) {while(n--); }void delay_ms(u16 ms) {u16 i,j;for(ims;i>0;i--)for(j110;j>0;j--); }void time0_init(v…

2月公开赛Web-ssrfme

考点&#xff1a; redis未授权访问 源码&#xff1a; <?php highlight_file(__file__); function curl($url){ $ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);echo curl_exec($ch);curl_close($ch); }if(isset($_GET[url…

innodb_buffer_pool_size在线缩小操作

一、背景 测试数据库内存32G&#xff0c;只有MySQL数据库&#xff0c;但是innodb_buffer_pool_size设置了24G&#xff0c;导致经常出现lack of memory问题、lack of swap问题。 因为使用了MySQL5.7.36版本&#xff0c;利用innodb_buffer_pool_size参数值可在线调整的新特性&…

编程之路:在Bug的迷宫中寻找出口

编程是一种艺术&#xff0c;也是一种科学。它要求我们既要有创造性的思维&#xff0c;又要有严谨的逻辑。在这条充满挑战的道路上&#xff0c;每个人都会遇到挫折&#xff0c;这些挫折可能来自于一个难以解决的Bug&#xff0c;一个复杂的算法&#xff0c;或者是在实现某个功能时…

云手机解决了TikTok哪些账号运营难题?

随着社交媒体的蓬勃发展&#xff0c;TikTok作为一款风靡全球的短视频应用&#xff0c;成为许多个人和企业进行品牌推广、内容创作的首选平台。然而&#xff0c;随之而来的是TikTok账号运营的一系列难题。本文将深入探讨云手机是如何解决这些难题的。 1、多账号运营的便捷性&…

tomcat实战演练

一.tomcat介绍 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c; Tomcat 具有处理 HTML 页面的功能&#xff0c;它还是一个 Servlet 和 JSP容器。Tomc…

C语言笔试题(指针、数组、整数在内存中的存储、结构体......)

文章目录 1.选择题2.代码题2.1 模拟实现strncat2.2 模拟实现strncpy2.3 编写判断大小端程序2.4 模拟实现atoi2.5 BC38 变种水仙花数2.6 BC98 序列中删除指定数字 今天我们一起来看一些题目 1.选择题 解析如下&#xff1a; 正确选项&#xff1a;B A.参数错误&#xff1b;D.返回…

Prettier+Vscode setting提高前端开发效率

文章目录 前言Prettier第一步&#xff1a;下载依赖&#xff08;团队合作&#xff09;或下载插件&#xff08;独立开发&#xff09;第二步&#xff1a;添加.prettierrc.json文件**以下是我使用的****配置规则** 第三步&#xff1a;添加.prettierignore文件**以下是我常用的****配…

LabVIEW多显示器环境下主显示器识别与管理

该程序使用 LabVIEW 图形化编程语言&#xff0c;涉及多显示器环境中主显示器的识别与信息提取。图像显示了两个不同的方法来获取主显示器的信息。 第一部分&#xff1a;方法一——基于显示器位置的主显示器识别 1. 当前监视器识别&#xff1a; 使用“FP.Monitor”属性节点获取…

plsql表格怎么显示中文 plsql如何导入表格数据

在Oracle数据库开发中&#xff0c;PL/SQL Developer是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了丰富的功能来帮助开发人员高效地进行数据库开发和管理。在使用PL/SQL Developer时&#xff0c;许多用户会遇到表格显示中文的问题&#xff0c;以…

ansible:

ansible&#xff1a; 远程自动化运维 ansible是基于python开发的配置管理和应用部署工具。 也是自动化运维的重要工具。 可以批量配置&#xff0c;部署&#xff0c;管理上千台主机。 只需要在一台主机配置ansible就可以完成其他主机的操作。 操纵模式&#xff1a; 1、模…

EmguCV学习笔记 VB.Net 6.4 霍夫变换

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示&#xff0c;有2个矢量图斑&#xff0c;一个是耕地地块&#xff0c;另一个是范围图斑&#xff0c;如果我们需要把此工程的所有数据以及引用地图一起分享给别人&#xff0c;就可以使用【打包工程】这个工具。 如上所示&#xff0c;在【地理处理】下输入【打包工程】&am…

【C语言】常见文件操作

文件的常见操作 #include<stdio.h>// 由于devc代码编码为ANCI&#xff0c;故读取的文件中若有中文&#xff0c;请设置文件编码为ANCI&#xff0c;否则会乱码 // 读文件 void test1() {char ch;FILE *fp; // 创建文件指针fp fopen("./file.txt", "r"…

数据结构系列-归并排序

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 归并排序 递归版本 首先&#xff0c;我们来看一下归并的示意图&#xff1a; 这是归并排序当中分解的过程。 然后便是两个两个进行排序&#xff0c;组合的过程。 归并完美的诠释…

系统编程-管道

管道 目录 管道 1、管道的特点 2、无名管道的使用步骤 &#xff08;1&#xff09;在进程中使用 pipe 函数来获取管道的文件描述符 &#xff08;2&#xff09;使用 fork 函数来创建子进程 &#xff08;3&#xff09;通过获取到的文件描述符来进行数据的传输 &#xff08…

[论文阅读] mobile aloha实验部分

DP:[1] CHI C, FENG S, DU Y, et al. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion[J]. 2023. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion精读笔记&#xff08;一&#xff09;-CSDN博客 哥伦比亚大学突破性的方法- Diffusio…

【SpringBoot】11 多数据源(MyBatis:dynamic-datasource)

介绍 多数据源&#xff1a;指的是一个单一应用程序中涉及了两个及以上的数据库&#xff0c;这种配置允许应用程序根据业务需求灵活地管理和操作不同的数据库。 需求 一个应用服务中&#xff0c;连接多个数据库&#xff0c;有本地的也有远程的&#xff0c;有MysQL、Oracle、P…

PDPS软件 那智机器人 (丰田版)离线程序导出处理

在PDPS仿真软件中导出的那智机器人离线程序&#xff0c;一般是无法直接给TFD控制装置-那智机器人&#xff08;丰田式样版&#xff09;导入及识别使用。因此要对导出的程序进行转换编译处理&#xff0c;才能给TFD那智机器人&#xff08;丰田式样版&#xff09;导入离线程序。以下…

react antd TreeSelect实现自定义标签

<ProFormTreeSelectlabel"接收对象"name"receiverObjects"colProps{{ span: 16 }}labelCol{{span: 6,}}wrapperCol{{span: 18,}}rules{[{ required: true }]}fieldProps{{showSearch: true,multiple: true,// autoClearSearchValue: true,filterTreeNod…