Vue 计算属性基础知识 监听属性watch

news2025/8/7 12:01:07

计算属性的概念

在{{}}模板中放入太多的逻辑会让模板内容过重且难以维护。例如以下代码:

    <div id="app">
        {{msg.split('').reverse().join('')}}
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg:'我想把vue学的细一点'
            }
        })
    </script>

在上面的{{}}中,模板不再是简单的声明式逻辑。必须看一段时间才能看得懂,这里是想要显示变量msg反转后的字符串。想要在模板中多次引用此处的反转字符串时,就会更加难以处理。因此,对于复杂逻辑,都应当使用计算属性。
计算属性本质是一种方法

    <div id="app">
        {{ReverseMsg}}
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg: '我想把vue学的细一点'
            },
            computed: {
                ReverseMsg: function () {
                    return this.msg.split("").reverse().join("")
                }
            }
        })
    </script>

在这里插入图片描述

计算属性虽被称为属性,但也是用来储存数据的(跟data一样),它的本质是方法。
计算属性一般是用来描述一个属性值依赖于,另一个属性值,当使用模板表达式{{}}将计算属性绑定到页面元素上时,计算属性会依赖的属性值变化时会自动更新DOM元素。

计算属性的组成

计算属性实际上由get函数和 set函数组成,分别用来获取和计算属性的值。
上文写到的代码只有一个方法,实际上就是get函数,即默认写就是get函数,通过get函数可以获取到计算属性的值,不过在需要时也可以提供一个set函数。改变了计算属性的值,set函数就会被执行,也就是通过计算属性的set方法可以检测到计算属性的改变。

    <div id="app">
        {{ReverseMsg}}
        <input type="text" v-model="msg">
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg: '我想把vue学的细一点'
            },
            computed: {
                //只有一个get函数的写法
                // ReverseMsg: function () {
                //     return this.msg.split("").reverse().join("")
                // }

                //get函数和set函数都有的写法
                ReverseMsg: {
                    get: function () {
                        return this.msg.split("").reverse().join("")
                    },
                    set: function (newvalue) {  //方法名固定为set 参数newvalue为改变后的计算属性的值
                        console.log("计算属性被改变了")
                        console.log("改变后的值:" + newvalue)

                    }
                }
            }
        })
    </script>

在这里插入图片描述

注意:
在set方法里面不要去直接 改变计算属性的值,否则会导致死循环。想要改变计算属性的值,一般是通过改变它的依赖值。

监听属性watch

监听属性watch是Vue实例的一个选项,使用watch监听器的方法可以检测某个数据是否发生变化,如果发生变化则可以执行一系列业务逻辑操作。

监听器以key-value的形式定义,key是一个字符串,它是需要被检测的对象,而value则可以是字符串、函数或是一个对象,或是否执行深度遍历deep,即是否对象内部的属性进行监听,value实际上是监听到key变化后执行的回调函数。

    <div id="app">
        {{msg}}
        <input type="text " v-model="msg">
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg: "我想学vue"
            },
            computed: {

            },
            methods: {

            },
            watch: {
                //监听msg的值是否发生改变,发生改变时执行相应的回调函数 从而执行业务逻辑
                msg: function (newValue, oldValue) {
                    console.log(`新的值 : ${newValue}`)
                }
            }
        })
    </script>

在这里插入图片描述

回调函数的参数newValue表示被监听属性改变后的值,而oldValue则表示被监听属性改变前的值。

    <div id="app">
        {{msg}}
        <input type="text " v-model="msg">
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg: "我想学vue"
            },
            computed: {

            },
            methods: {
                watchMsg: function (newValue, oldValue) {
                    console.log(`新的值 : ${newValue}`)
                }
            },
            watch: {
                //监听msg的值是否发生改变,发生改变时执行相应的回调函数 从而执行业务逻辑
                msg: `watchMsg`
            }
        })
    </script>

像这样的监听器的回调函数写进methods里面也是可以的

vm.$watch使用

Vue实例方法vm.$watch的格式如下:

vm.$watch(data,callback[,options])

第一个参数为要监听的数据;第二个参数为回调函数;第三个函数为选项,可有可无。

实际上,vm.$watch与Vue实例选项watch是一样的,只是写的位置不一样。实例方法写在new Vue()的外面,watch选项是写在里面,另外实例方法前面有美元符号。

    <div id="app">
        {{msg}}
        <input type="text " v-model="msg">
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg: "我想学vue"
            },
            computed: {

            },

        })

        //注意:下面的msg外的单引号不能漏掉,其也可以换成双引号
        vm.$watch('msg', function (newValue, oldValue) {
            console.log(`新值:${newValue} 旧值:${oldValue}`)
        })
    </script>

计算属性与监听属性watch使用总结

计算属性的结果会被缓存起来,只有依赖的属性发生变化时才会重新计算,必须返回一个数据,主要用来进行纯数据的操作。
监听器主要用来监听某个数据的变化,从而去执行某些具体的回调业务逻辑,但不仅仅局限于返回数据。比如,当在数据变化时需要执行异步发送ajax请求或开销较大的操作时,采用监听器较好。

综合练习

通过v-model指令双向绑定数据,通过文本框改变数据后,浏览器会重新回到原来的函数。

解决方法:1、浏览器自带的本地存储器:localStorage
2、在生命周期中的mounted时间段 读取本地存储器 并把值赋值给数据

代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="app">
        {{msg}}
        <input type="text " v-model="msg" v-on:keyup="gaibian">
    </div>

    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                msg: ""
            },
            computed: {

            },
            mounted: function () {

                this.msg = localStorage.getItem("msg")
            }
            ,
            methods: {
                gaibian() {
                    localStorage.setItem("msg", this.msg)
                }
            }

        })



    </script>
</body>

</html>

输入文本

在这里插入图片描述

刷新页面后数据依然保留

在这里插入图片描述

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

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

相关文章

SAP ABAP 采购订单屏幕增强

为采购订单增加一个页标签&#xff0c;在其中放入客户自定义字段&#xff0c; 1. CMOD 增强接口&#xff1a; MM06E005 EXIT_SAPMM06E_006 为子屏幕参数传入出口&#xff08;抬头&#xff09; EXIT_SAPMM06E_008 为子屏幕参数传出出口&#xff08;抬头&#xff09; EXIT_SA…

Vue基础19之插槽

Vue基础19插槽不使用插槽App.vueCategory.vue默认插槽&#xff1a;slotApp.vueCategory.vue具名插槽App.vueCategory.vue作用域插槽App.vueCategory.vue总结插槽 不使用插槽 App.vue <template><div class"bg"><Category :listData"food"…

vue-element-admin:基于element-ui 的一套后台管理系统集成方案

文章目录一、vue-element-admin1、vue-element-admin1.1简介1.2安装2、vue-admin-template2.1简介2.2安装一、vue-element-admin 1、vue-element-admin 1.1简介 vue-element-admin是基于element-ui 的一套后台管理系统集成方案。 GitHub地址&#xff1a;https://github.com…

redis集群模式登陆

总结redis单机模式时&#xff0c;登陆redis的命令格式&#xff1a; ./redis-cli -h 地址 -p 端口redis集群模式时&#xff0c;登陆redis的命令格式&#xff1a; ./redis-cli -h 地址 -p 端口 -c举例1&#xff1a;redis单机模式下登陆rootubuntu:/usr/local/redis/redis-7.0.0/b…

使用IPEmotion进行声学采集与分析

一 IPEmotion简介 IPEmotion作为IPETRONIK的软件产品&#xff0c;主要应用于车辆测试以及配合不同的车载和实验室测试系统&#xff0c;并满足其测量需求。通过专业化的数据采集软件IPEmotion&#xff0c;我们可以完成数据采集过程&#xff0c;包括&#xff1a;配置数据源/仪器…

信创系统借力小程序应用生态的可能性

随着国内市场需求的不断增长&#xff0c;国产操作系统的应用也开始逐步发展壮大。国产操作系统在与其他操作系统的竞争中&#xff0c;越来越受到用户的青睐。国产操作系统作为一个全新的市场&#xff0c;给应用开发带来了新的机遇和挑战。本文将从国产操作系统应用的现状分析、…

【LeetCode】1. 两数之和

题目链接&#xff1a;https://leetcode.cn/problems/two-sum/ &#x1f4d5;题目要求&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入…

[Java·算法·困难]LeetCode32. 最长有效括号

每天一题&#xff0c;防止痴呆题目示例分析思路1题解1分析思路2题解2分析思路3题解3&#x1f449;️ 力扣原文 题目 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 输入&#xff1a;s "(()&q…

开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)

开源鸿蒙南向嵌入学习笔记——NAPI框架学习&#xff08;一&#xff09; 前言——系列介绍 本系列文章主要是记录笔者在鸿蒙南向的学习与工作中的知识点笔记记录&#xff0c;其中不止会针对鸿蒙中的学习问题进行思考与记录&#xff0c;也会对涉及到的一些嵌入式等其他领域知识&…

[N0wayBack 练习题] My_enc,Euler,EasyLock,RRRRSA,EasyNumber,pwn

加入一个队,队里的练习题不少,还有WP真好My_enc原题from secret import flag import randomdef Cyber_key(LEN):Key [[] for i in range(row)]for x in range(row):for i in range(LEN):Key[x].append(random.randint(0, 2023))return Keydef Punk_enc(Key, msg):out []for l…

什么是API接口

API接口是指应用程序接口&#xff0c;是一种让不同的应用程序之间进行数据交互的方式。在现代软件开发中&#xff0c;API接口已经成为了必不可少的一部分。它们让开发者们可以将不同的功能组合在一起&#xff0c;同时也让不同的应用程序之间可以相互连接和通讯。API接口的作用A…

钓鱼客服到拿下服务器全过程(重点在于钓鱼添加img src)

重点总结 钓鱼时主动在变量中添加了字段&#xff0c;等待用户点击获取ip信息进行下一步资金盘plus呢 左看右看没啥东西&#xff0c;看看客服系统能不能打xss。 吊毛客服居然不在线&#xff0c;这套客服系统见过是whisper&#xff0c;之前审计过没有存储xss 但能通过伪造图片…

Codeforces Round 856 (Div. 2)(A~D)

A. Prefix and Suffix Array给出一个字符串的所有前缀和后缀&#xff0c;判断这个字符串是否是回文串。给出的前后缀都不是整个字符串。思路&#xff1a;如果是回文的话&#xff0c;那每一个等长的字符串也都是相同的。AC Code&#xff1a;#include <bits/stdc.h>typedef…

AQS底层源码深度剖析-BlockingQueue

目录 AQS底层源码深度剖析-BlockingQueue BlockingQueue定义 队列类型 队列数据结构 ArrayBlockingQueue LinkedBlockingQueue DelayQueue BlockingQueue API 添加元素 检索(取出)元素 BlockingQueue应用队列总览图 AQS底层源码深度剖析-BlockingQueue【重点中的重…

Spark Join大大表

Spark Join大大表分而治之拆分内表外表的重复扫描案例负隅顽抗数据分布均匀数据倾斜Task 数据倾斜Executor 数据倾斜两阶段 ShuffleExecutors 调优案例Join 大大表 : Join 的两张体量较大的事实表&#xff0c;尺寸相差在 3 倍内&#xff0c;且无法广播变量用大表 Join 大表才能…

观点丨Fortinet谈ChatGPT火爆引发的网络安全行业剧变

FortiGuard报告安全趋势明确指出“网络攻击者已经开始尝试AI手段”&#xff0c;ChatGPT的火爆之际的猜测、探索和事实正在成为这一论断的佐证。攻守之道在AI元素的加持下也在悄然发生剧变。Fortinet认为在攻击者利用ChatGPT等AI手段进行攻击的无数可能性的本质&#xff0c;其实…

动环监控4大应用价值,这个价值最大

机房管理&#xff0c;已成为企业管理和发展的首要任务。为提升机房管理的效率&#xff0c;应从空间环境、设备性能等多角度&#xff0c;对机房环境监测进行实时监控掌握相关数据参数&#xff0c;确保故障隐患及时发现&#xff0c;提高机房整体管理水平&#xff0c;降低运维难度…

Hadoop三大框架之HDFS

一、概述HDFS产生的背景及定义HDFS产生背景随着数据量越来越大&#xff0c;在一个操作系统存不下所有的数据&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;需要一种系统来管理多台机器上的文件&#xff0c;这就是分布式文件…

一篇文章带你了解折线图

在我们的日常生活中&#xff0c;折线图随处可见&#xff0c;如医院里的心电图、股市里的股票走势、企业中的财务报表分析&#xff0c;但是折线图的具体适用情形&#xff0c;你真的了解吗&#xff1f; 折线图&#xff08;line chart&#xff09;也叫曲线图&#xff0c;用于显示数…

javaWeb在线考试系统

一、项目简介 本项目是一套javaWeb在线考试系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse 确保…