Vue 2的计算属性与侦听器

news2025/1/18 11:53:21

计算属性 vs 方法 vs 侦听器

计算属性的出现是为了解决模板内表达式太过复杂而变得难以维护。

假设我们知道长和宽,要计算一个矩形的面积,如果没有计算属性,我们可能像下面这样处理:

<div id="app">
    <input type="text" v-model="width">
    <input type="text" v-model="height">
    <p>面积是{{area()}}</p>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            width:0,
            height:0
        },
        methods: {
            area: function() {
                return this.width * this.height
            }
        },
    })
</script>

使用计算属性:

<div id="app">
    <input type="text" v-model="width">
    <input type="text" v-model="height">
    <p>面积是{{area}}</p>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            width:0,
            height:0
    	},
        computed:{
            area:function(){
                return this.width*this.height
            }
        }
    })
</script>

它们的区别是,使用方法需要每次获取值都调用该方法,使用计算属性会将值缓存,只在它的响应式依赖变化时才会重新计算。

侦听器和计算属性一样都会监听数据的变化,但是,对于要监听的属性,侦听器需要给它们每一个都单独设置响应函数,计算属性则只需按需按需设置,例如上面的例子使用侦听器的话:

<div id="app">
    <input type="text" v-model="width">
    <input type="text" v-model="height">
    <p>面积是{{area}}</p>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            width:0,
            height:0,
            area:0
        },
        watch:{
            width:function(newVal){
                this.area = newVal * this.height
            },
            height:function(newVal){
                this.area = newVal * this.width
            }
        }
    })
</script>

这样会显得重复冗余。

所以,计算属性适用于基于其他属性计算出派生值的情况,例如计算面积、价格等,也适用于需要进行一些复杂的数据处理和转换;侦听器适用于监听属性的变化,然后执行一些异步操作(例如API调用)、副作用(例如更新其他属性)或自定义逻辑(例如数据变化时的动态效果)。


计算属性的getter与setter

计算属性默认是getter,我们也可以设置其setter。

<div id="app">
    <p>Base Count: {{ baseCount }}</p>
    <p>Current Count: {{ count }}</p>
    <button @click="incrementCount">Increment Count</button>
    <button @click="incrementBaseCount">Increment Base Count</button>
</div>

<script>
    new Vue({
        el: '#app',
        data: {
            baseCount: 5
        },
        computed: {
            count: {
                // Getter function
                get: function () {
                    return this.baseCount * 2;
                },
                // Setter function
                set: function (newCount) {
                    this.baseCount = newCount / 2;
                }
            }
        },
        methods: {
            incrementCount: function () {
                this.count++;
            },
            incrementBaseCount: function () {
                this.baseCount++;
            }
        }
    });
</script>

在这里插入图片描述

我们可以注意到,getter导致的count改变不会触发setter,同时setter导致的baseCount改变也不会触发getter。

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

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

相关文章

基于Java+SpringBoot+Vue的乌鲁木齐南山冰雪旅游服务网站【源码+论文+演示视频+包运行成功】

博主介绍&#xff1a;✌csdn特邀作者、博客专家、java领域优质创作者、博客之星&#xff0c;擅长Java、微信小程序、Python、Android等技术&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推…

北京“三阳”凶猛,真会说来就到吗?

综合媒体最新报道&#xff0c;据北京疾控中心发布的第32周《传染病周报》称&#xff0c;8月7日-8月13日&#xff0c;呼吸道传染总报告数为6205例(新冠为主)&#xff0c;比上周猛增了71.6%&#xff01; 从30周到32周&#xff0c;北京呼吸道传染病分别增长了5.3%、20.6%、71.6%。…

VBA_MF系列技术资料1-157

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

ubuntu向日葵无法连接

近来收到部分用户小伙伴的反馈&#xff0c;在CentOS8、Ubuntu17.10或更高版本上使用向日葵个人版&#xff0c; 当其它设备远程控制自己的时候&#xff0c;控制界面会出现“连接已断开”或显示为黑屏的情况。 这其实是由于系统默认采用了wayland作为显示服务器的缘故&#xff0…

python Selenium

Selenium概述 Selenium是一个用于web应用程序测试的工具&#xff0c;模拟浏览器功能&#xff0c;自动执行网页中的is代码&#xff0c;实现动态加载 支持通过各种driver (FirfoxDriver,IternetExplorerDriver&#xff0c;OperaDriver&#xff0c;chromeDriver) 驱动直实浏览器完…

记一次mysql8 在linux上安装全过程

参照MYSQL官网官方文档安装 1、mysql官网 mysql官网 2、直接进入文档页 找到安装文档 3、找到自己系统对应的安装文档&#xff0c;选合适的安装方式&#xff0c;我这里使用的是YUM方式 a、开始安装之前需要替换yum仓库 具体步骤如下 b、将下载的文件上传至自己的服务器 如下…

安全(权限)框架Shiro概述及原理

1.1 Shiro是什么 Apache Shiro是一个功能强大且易于使用的Java安全&#xff08;权限&#xff09;框架。Shiro可以完成&#xff1a;认证、授权、加密、会话管理、与Web集成、缓存 等。借助Shiro您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的Web和企业应用…

数据库分片原则和算法

1. 数据分片概念 数据库分片是指将一个大型数据库拆分成多个小型数据库&#xff0c;每个小型数据库称为一个分片。通过这种方式&#xff0c;可以将数据库的负载分散到多个服务器上&#xff0c;从而提升性能瓶颈以及可用性。 数据分片的核心手段就是对关系型数据库进行分库和分表…

【福建事业单位-公共基础-哲学】02唯物辩证法三大规律、认识论、历史唯物主义

【福建事业单位-公共基础-哲学】02唯物辩证法 一、唯物辩证法1.1 对立统一规律方法论 矛盾的不平衡性分析方法论&#xff08;两点论和重点论&#xff09;事物发展的内因和外因 1.1总结1.2 质量互变规律量变和质变的关系 方法论 1.3 否定之否定规律总结 二、认识论2.1实践决定认…

智慧工厂管理系统是什么,有什么好用的智慧工厂管理系统

阅读本文您可以了解&#xff1a;1、智慧工厂管理系统的定义&#xff1b;2、智慧工厂管理系统的作用&#xff1b;3、好用的智慧工厂管理系统推荐 一、智慧工厂管理系统是什么 智慧工厂管理系统是一种利用先进的信息技术&#xff08;如物联网、人工智能、大数据分析等&#xff0…

【C++】做一个飞机空战小游戏(九)——发射子弹的编程技巧

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

Linux - 借助 inotifywait,轻松实现 Linux 文件/目录事件监听

文章目录 inotify-tools 依赖包使用示例 inotify-tools 依赖包 [rootVM-24-3-centos ~]# yum install inotify-tools Loaded plugins: fastestmirror, langpacks Repository epel is listed more than once in the configuration Determining fastest mirrors ...... ...... ..…

用pytorch实现Resnet

ResNet&#xff08;Residual Network&#xff09;是一种深度卷积神经网络架构&#xff0c;由Kaiming He等人于2015年提出。它在计算机视觉领域引起了革命性的变革&#xff0c;使得训练更深的神经网络成为可能&#xff0c;超越了传统网络架构的限制。 ResNet的主要创新在于…

Matplotlib数据可视化(六)

目录 1.绘制概率图 2.绘制雷达图 3.绘制流向图 4.绘制极坐标图 5.绘制词云图 1.绘制概率图 from scipy.stats import norm fig,ax plt.subplots() plt.rcParams[font.family] [SimHei] np.random.seed() mu 100 sigma 15 x musigma*np.random.randn(437) num_bins …

GUI神器 NXP GUI GUIDER开发工具入门教程

好记性不如烂笔头&#xff0c;既然不够聪明&#xff0c;就乖乖的做笔记&#xff0c;温故而知新。 本文档用于本人对知识点的梳理和记录 目录 一、前言 二、下载 三、演示 四、字体和图片/动画等资源 五、总结 一、前言 GUI Guider是恩智浦为LVGL开发了一个上位机GUI设计工…

初识网络原理(笔记)

目录 ​编辑局域网 网络通信基础 IP 地址 端口号 协议 协议分层 TCP / IP 五层网络模型 网络数据传输的基本流程 发送方的情况&#xff1a; 接收方的情况 局域网 搭建网络的时候&#xff0c;需要用到 交换机 和 路由器 路由器上&#xff0c;有 lan 口 和 wan 口 虽…

涨粉明显,播放暴涨5倍,达人在抖音乘风美拉德

美拉德火了&#xff01; 过去的这个夏天&#xff0c;多巴胺风盛行&#xff0c;无论是街上女孩子们的穿搭&#xff0c;还是店里的陈设&#xff0c;网络上的浏览与讨论&#xff0c;都离不开它。 步入金秋&#xff0c;另一股风刮起。与完美适配夏天五颜六色的多巴胺不同&#xf…

怎么用Python制作一个七夕爱心?

先看效果&#xff1a; 图片效果&#xff1a; 视频效果&#xff1a; 七夕代码效果展示 代码介绍&#xff1a; 这段代码是实现一个用 tkinter 库绘制动态爱心的程序。 用到一些数学函数和常量&#xff0c;例如&#xff1a;sin, cos, pi, log 等等。 定义一个 Heart 类&#x…

msvcp140.dll丢失的解决方法,如何预防msvcp140.dll丢失

在电脑操作系统中经常会弹出类似msvcp140.dll丢失的错误提示窗口&#xff0c;导致软件无法正常运行。为什么会出现msvcp140.dll丢失的情况呢&#xff1f;出现这种情况应该如何解决呢&#xff1f;小编有三种解决方法分享给大家。 一.msvcp140.dll丢失的原因 1.安装过程中受损:在…

Linux下Docker安装及卸载

文章目录 Linux下Docker安装及卸载1 Docker安装及卸载1.1 安装前准备1.2 安装docker软件2.4.3 启动docker2.2.4 测试2.2.5 卸载 Linux下Docker安装及卸载 1 Docker安装及卸载 官方网址&#xff1a;https://docs.docker.com/engine/install/centos/ 1.1 安装前准备 确定你是C…