Vue 2 计算属性与侦听器

news2024/11/19 20:29:24

计算属性 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/898186.html

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

相关文章

functools.wrap的使用

一、介绍 functools.wraps 是 Python 标准库中的一个函数&#xff0c;用于帮助创建装饰器时保留被装饰函数的元数据&#xff08;如函数名、文档字符串等&#xff09;。在使用装饰器时&#xff0c;如果不使用 functools.wraps&#xff0c;则被装饰函数的一些元数据可能会丢失或…

ubuntu系统快捷键

前言&#xff1a;可以在设置—>设备—>键盘中查看键盘快捷键 打开活动搜索界面 Super键 想要打开一个应用程序&#xff1f;按下 Super 键然后搜索应用程序。如果搜索的应用程序未安装&#xff0c;它会推荐来自应用中心的应用程序。 想要看看有哪些正在运行的程序&#xf…

【C++笔记】C++之类与对象(中)

【C笔记】C之类与对象&#xff08;中&#xff09; 1、类的构造函数1.1、构造函数的基本用法1.2、构造函数的7个特性 2、类的析构函数2.1、析构函数的基本用法2.2、析构函数的6个特性 3、类的拷贝构造函数3.1、拷贝构造的基本用法3.2、拷贝构造的“无限套娃”陷阱3.3、深拷贝与浅…

汽车领域专业术语

1. DMS/OMS/RMS/IMS DMS&#xff1a;即Driver Monitoring System&#xff0c;监测对象为Driver&#xff08;驾驶员&#xff09;。DMS三大核心&#xff1a; OMS&#xff1a;即Occupancy Monitoring System&#xff0c;监测对象为乘客。 RMS&#xff1a;后排盲区检测系统 IMS&…

动手学深度学习--基础知识上篇

&#x1f388;动手学deep learning ☁️本专栏会定期更新关于动手学深度学习的每章知识点的讲解&#xff0c;题目答案 &#x1f47b;如果喜欢&#xff0c;欢迎点赞&#xff0c;收藏 动手学深度学习-预备知识篇 线性代数篇 1-3题讲解 证明一个矩阵 A \mathbf{A} A的转置的转置…

C#程序配置读写例子 - 开源研究系列文章

今天讲讲关于C#的配置文件读写的例子。 对于应用程序的配置文件&#xff0c;以前都是用的ini文件进行读写的&#xff0c;这个与现在的json类似&#xff0c;都是键值对应的&#xff0c;这次介绍的是基于XML的序列化和反序列化的读写例子。对于ini文件&#xff0c;操作系统已经提…

Java课题笔记~ 整合第三方技术

1. 整合JUnit 问题导入 回忆一下Spring整合JUnit的步骤&#xff1f; 1.1 Spring整合JUnit&#xff08;复习&#xff09; 1.2 SpringBoot整合JUnit 【第一步】添加整合junit起步依赖(可以直接勾选) <dependency><groupId>org.springframework.boot</groupId…

什么是变量提升(hoisting)?它在JavaScript中是如何工作的?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 变量提升&#xff08;Hoisting&#xff09;⭐ 变量提升的示例&#xff1a;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

水果成篮(力扣)双指针滑动窗口 JAVA

你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而&#xff0c;农场的主人设定了一些严格的规矩&#xff0c;你必须按照要求采摘水果&…

[管理与领导-27]:IT基层管理者 - 团队管理 - 育人 - 如何评估团队的能力?如何培养团队?

目录 一. 培养团队&#xff08;练兵&#xff09;为什么很重要 二. 如何评估团队的能力模型 三、培养人才 一. 培养团队&#xff08;练兵&#xff09;为什么很重要 培养团队是组织中的一项重要任务&#xff0c;以下是一些说明为什么培养团队是如此重要的原因&#xff1a; 养…

MAC QT开发攻略

文章目录 基础步骤安装QT、QTCreator安装CMakeNinja 安装Clion编译器在QTCreator中新建项目更改CMake生成器 导入Clion CMake生成文件 基础步骤 安装QT、QTCreator 安装CMake 由于clion需要使用cmake构建 Ninja Ninja下载 安装Clion编译器 Clion 2023.1.3 破解版安装教程…

从零注册和搭建搭建uniapp微信小程序项目

03 - 开发环境搭建和项目创建 语雀 目标 什么是小程序拥有小程序开发者账号安装微信开发者工具创建小程序项目使用基本的组件上线一个体验版小程序 什么是小程序 了解小程序&#xff0c;以及小程序开发为什么会成为一门单独的职业。 我们从以下3个视角&#xff0c;来了解一下…

手把手教学——终端工具xshell与文件传输工具xftp使用步骤及详解

前言 xshell是一款常用于连接本地linux服务以及云服务器的终端远程连接工具&#xff0c;该款终端工具常搭配远程文件传输工具xftp一起使用&#xff0c;由于还有很多小伙伴还不知道这两款终端工具的使用流程及步骤&#xff0c;Darren洋在这里给小伙伴们进行详细讲解。 一、下载工…

【Java】对象数组排序(Comparable接口/Comparator接口)

Comparable接口&#xff08;compareTo&#xff09; Arrays 类中的 sort 方法承诺可以对对象数组进行排序&#xff0c;但要求满足下列前提&#xff1a;对象所属的类必须实现了 Comparable 接口&#xff0c;且定义了compareTo方法。 Comparable接口的代码 public interface Comp…

无涯教程-TensorFlow - 单词嵌入

Word embedding是从离散对象(如单词)映射到向量和实数的概念&#xff0c;可将离散的输入对象有效地转换为有用的向量。 Word embedding的输入如下所示: blue: (0.01359, 0.00075997, 0.24608, ..., -0.2524, 1.0048, 0.06259) blues: (0.01396, 0.11887, -0.48963, ..., 0.03…

解决Pycharm的Settings中Project不见了也无法选择Python Interpreter的方法

目录 一、问题如下二、解决方法 一、问题如下 突然打开项目没有python解释器&#xff0c;也无法重新配置python Interpreter&#xff0c;而且整个文件夹是黄色高亮的形式&#xff0c;如下显示&#xff0c;而且重新安装了pycharm也没用甚至说打开File–>Setting–>Projec…

网络编程套接字(1)

文章目录 网络编程套接字(1)1. 预备知识1.1 源IP与目的IP1.2 认识端口号1.3 理解 "端口号" 和 "进程ID"1.4 源端口号和目的端口号1.5 认识TCP协议和UDP协议(1) TCP(2) UDP 1.6 网络字节序 2. socket编程接口2.1 socket 常见API2.2 sockaddr结构 网络编程套…

深度学习环境搭建 cuda、模型量化bitsandbytes安装教程 windows、linux

cuda、cudann、conda安装教程 输入以下命令&#xff0c;查看 GPU 支持的最高 CUDA 版本。 nvidia-smi cuda安装&#xff08;cudatoolkit&#xff09; 前往 Nvidia 的 CUDA 官网&#xff1a;CUDA Toolkit Archive | NVIDIA Developer CUDA Toolkit 11.8 Downloads | NVIDIA …

react之路由的安装与使用

一、路由安装 路由官网2021.11月初&#xff0c;react-router 更新到 v6 版本。使用最广泛的 v5 版本的使用 npm i react-router-dom5.3.0二、路由使用 2.1 路由的简单使用 第一步 在根目录下 创建 views 文件夹 ,用于放置路由页面 films.js示例代码 export default functio…

IDM最新版2023不限速下载网盘详细操作教程

开启这个开关&#xff0c;让你的浏览器下载速度翻倍!大家有没有听说过IDM下载器&#xff0c;那是因为它的多线程下载功能&#xff0c;所以下载速度快&#xff0c;其实我们的浏览器也有多线程下载功能&#xff0c;只是默认关闭了而已&#xff0c;只需开启它&#xff0c;就可以有…