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

news2024/9/23 1:40:20

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: {
                // getter
                get() {
                    return this.surname + ' ' + this.lastname;
                },
                // setter
                set(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.coloradmin.cn/o/2071630.html

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

相关文章

JLMSR超分算法说明和效果

一、简介 JLMSR是基于加权概率模型构造的一种超分算法&#xff0c;属于传统超分&#xff0c;无需训练&#xff0c;适合硬件化。与传统超分的插值方案最大区别在于基于16*16的块进行上下文概率统计&#xff0c;结合权重进行插值。目前该插值方案已经线性化和整数化&#xff0c;…

适用于应用程序安全的 11 大 DevSecOps 工具

DevSecOps&#xff08;开发者安全运营&#xff09;是指将安全最佳实践融入软件开发生命周期的过程&#xff0c;从而实现更好的安全结果。这是提供全面安全基础设施的重要方面。 市场格局&#xff1a;DevSecOps市场竞争激烈。该领域有数百家供应商提供工具&#xff0c;帮助组织…

能实现可算不可见的同态加密技术详解

目录 同态加密的基本概念 同态加密示例 同态加密的原理 同态加密的类型 同态加密的应用场景 同态加密的挑战 小结 同态加密&#xff08;Homomorphic Encryption&#xff0c;HE&#xff09;是一种满足密文同态运算性质的加密算法&#xff0c;可以在加密数据上直接执行特定…

【C++ Primer Plus习题】4.8

问题: 解答: #include <iostream> #include <string> using namespace std;typedef struct _Pizza {string companyName;float diameter;float wieght; }Pizza;int main() {Pizza *pnew Pizza;cout << "请输入披萨的直径: ";cin >> p->d…

如何定义、注册以及什么是异步组件?

一. 如何定义异步组件 定义异步组件需要使用vue提供的 defineAsyncComponent() 方法&#xff1a; 注意&#xff1a;通过观察大家也可以发现&#xff0c;所谓的异步组件就相当于给普通组件套了一层外壳(defineAsyncComponent()),当然现在还不能感受到异步组件的魅力&#xff0c…

大模型入门到精通——Prompt Engineering工程

Prompt Engineering 1. Prompt Engineering 的意义 在 LLM&#xff08;大语言模型&#xff09;时代&#xff0c;Prompt Engineering&#xff08;提示工程&#xff09;已经成为开发者与用户的重要技能和概念。随着大模型&#xff08;如 GPT、GLM、BERT 等&#xff09;的快速发…

Windows SDK(九)登录框和计算器练习

这节课我们分别开始讲解登录框和计算机的实现 登录框实现 我们以上节课所学&#xff0c;自行创建一个对话框&#xff0c;ID为IDD_DIALOG1并将他编辑为一个登录框的样式。其中我们将账户的编辑框ID设置为IDC_ENIT_USERNAME&#xff0c;密码的编辑框ID设置为IDC_ENIT_PASSWORD。…

tm和r商标哪个最放心用!

有个网友联系普推知产老杨&#xff0c;问申请的商标可以授权使用不&#xff0c;这个没有下商标注册证&#xff0c;基本上没多大用&#xff0c;申请的商标也可以授权&#xff0c;但是由于该商标尚未获得注册&#xff0c;其权利状态尚不稳定会存大许多风险。 TM基本是下受理书后的…

MySQL 主从复制的两种方式详解

目录 概述 主从复制原理 环境准备 基于二进制日志的复制 配置master 配置slave 启动复制的命令 测试 Gtid方式进行主从同步 工作原理 配置master 配置slave 测试 概述 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中&#xff0c;然后…

初识C语言指针(4)

目录 1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. typedef 关键字 6. 函数指针数组 结语 1. 字符指针变量 字符指针变量就是存储字符或字符串首字符地址的变量&#xff0c;字符指针变量有2种使用方式。 最常用的使用方式&#xff1a…

pikachu-ssrf_redis

目录 SSRF 1、SSRF漏洞介绍&#xff1a; 2、SSRF漏洞原理&#xff1a; 3、SSRF漏洞利用手段&#xff1a; 4、SSRF漏洞绕过方法&#xff1a; SSRF(curl)用法 1、通过网址访问链接 2、利用file协议查看本地文件 3、dict协议扫描内网主机开放端口 4.gopher&#xff1a;威…

神经网络算法 - 一文搞懂Gradient Descent(梯度下降)

本文将从梯度下降的本质、梯度下降的原理、梯度下降的算法 三个方面&#xff0c;带您一文搞懂梯度下降 Gradient Descent | GD。 梯度下降 机器学习“三板斧”&#xff1a;选择模型家族&#xff0c;定义损失函数量化预测误差&#xff0c;通过优化算法找到最小化损失的最优模型参…

docker GBase 8sV8.8使用的常见错误

因项目需要GBase 8sV8.8数据库环境&#xff0c;所以在搭建使用过程中有一些坑和错误&#xff0c;所以记录和分享 docker搭建 docker.com获取镜像 docker pull liaosnet/gbase8s:v8.8_3503x1_x64创建容器 docker run -d -p 19088:9088 \-e SERVERNAMEgbase01 \-e USERPASSGB…

CCleaner:系统优化与隐私保护的双重守护

大家好&#xff0c;今天电脑天空要介绍一款非常实用的系统优化工具——CCleaner。如果你的电脑运行速度越来越慢&#xff0c;或者担心隐私泄露问题&#xff0c;那么CCleaner可能是你的解决方案。 系统优化&#xff0c;一键搞定 CCleaner能够智能识别并清理电脑中的临时文件、…

基于Spring Boot的文字识别系统

前端使用htmlcssjs&#xff0c;后端使用Spring Boot&#xff0c;数据库使用mysql&#xff0c;识别算法有两个&#xff0c;一个是使用百度OCR接口&#xff0c;一个是自己写一个python&#xff0c;用flask包装。 其中百度OCR接口可以去免费申请&#xff0c;然后把appid、apikey、…

k8s 部署Ruoyi-Vue-Plus之vue打包镜像

在这里插入图片描述 在这篇文章中&#xff0c;解释如何通过容器化&#xff08;Docker&#xff09;来打包和部署前端项目&#xff0c;替代之前手动维护版本的方式 1.nginx配置 在 ruoyi-ui 项目的根目录下创建一个 nginx.conf 文件, 我没有使用monitor-admin和xxljob-admin模块…

【吊打面试官系列】为什么Mysql的索引结果用B+树

Mysql如何使用索引查询数据的 下图是一个B树我们的目标节点是 13 我们先根据 13 锁定非叶子节点 2&#xff0c;计算机进行一次IO操作把叶子节点取出来&#xff0c;在叶子节点2中找到叶子节点5 里面有 13 计算机也要进行一次IO将数据取到内存里然后读数据 一共进行了 3次磁盘I…

MATLAB 快速计算点到二维直线的距离并可视化(79)

计算点到二维直线距离,主要是还提供了具体的可视化方法 MATLAB 快速计算点到二维直线的距离并可视化(79) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 问题:给定一条直线的方程 (Ax + By + C = 0) 和一个点 ((x_0, y_0)),点到直线的距离 (d) 方法:运行此脚本后,…

区块链的搭建与运维4

区块链的搭建与运维4 任务一:区块链产品需求分析与方案设计 本任务需要依据项目背景完成需求分析与方案设计,具体要求如下: 按照新能源系统的需求规定,用户可以通过本系统实现能源管理与交易、新能源资产管理与交易、用户管理等功能。本系统软件部分可划分为浏览器页面、服务…

Tina-SDK开发

开发环境搭建 获取TinaSDK源码 Tina-SDKV2.0源码网盘链接&#xff1a;https://pan.baidu.com/s/13uKlqDXImmMl9cgKc41tZg?pwdqcw7 上传到ubuntu&#xff0c;创建文件夹用来保存源码&#xff1a; ubuntuubuntu1804:~$ mkdir Tina_SDK ubuntuubuntu1804:~$ cd Tina_SDK/ ubu…