Vue2 第四节 计算属性,监视属性

news2024/11/15 11:20:55
1.计算属性

2.监视属性

3.计算属性与监视属性之间的关系

一.计算属性

  1. 定义:要用的属性不存在,要通过已有属性计算得来
  2. 原理:底层借助了Object.defineproperty方法提供的getter和setter
  3. get函数什么时候会执行:初次读取的时候会执行一次; 当依赖的数据发生改变时会被再次调用
  4. 优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便
  5. 计算属性最终会出现在vm上,直接读取使用即可
  6. 如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时所依赖的数据发生改变
  7. 使用computed配置来实现,在模板中可以直接使用
    <div id="root">
            姓:<input type="text" v-model="firstName"><br><br>
            名:<input type="text" v-model="lastName"><br><br>
            全名:<span>{{fullName}}</span>
        </div>
       <script type="text/javascript">
        const vm = new Vue({
            el:'#root',
            data: {
                firstName:'张',
                lastName:'三'
            },
            computed: {
                fullName:{
                    get() {
                        return this.firstName + '-' + this.lastName
                    },
                    // 当fullName被修改时调用
                    set(value) {
                        const arr = value.split('-')
                        this.firstName = arr[0]
                        this.lastName = arr[1]
                    }
                }
            }
        })
  8.  修改输入框中的内容时,下面的计算属性也会跟着变化

    9. 如果只考虑读取,不考虑修改的话,可以简写为以下形式 

   <script type="text/javascript">
    const vm = new Vue({
        el:'#root',
        data: {
            firstName:'张',
            lastName:'三'
        },
        computed: {
            // 完整写法
            // fullName:{
            //     get() {
            //         return this.firstName + '-' + this.lastName
            //     },
            //     set(value) {
            //         const arr = value.split('-')
            //         this.firstName = arr[0]
            //         this.lastName = arr[1]
            //     }
            // }
            // 简写形式:只考虑读取,不考虑修改的时候才能使用
            fullName() {
                return this.firstName + '-' + this.lastName
            }
        }
    })
   </script>

 二. 监视属性

(1)概念:监视属性是监视data的属性变化,也可以用于监视计算属性

(2)监视属性传的是一个配置对象,监视谁,在watch里面就写谁

 (3)监视的属性中必须包含一个handler函数,handler函数有两个参数,分别代表修改前和修改后的值,当监视的属性发生变化时,回调函数自动调用,进行相关操作

(4)也可以对commputed中的属性进行监视

        const vm = new Vue({
            el: '#root',
            data: {
                isHot: true
            },
            computed: {
                info () {
                    return this.isHot ? '炎热' : '凉爽'
                }
            },
            methods: {
                changeWeather () {
                    this.isHot = !this.isHot
                }
            },
            watch: {
                info: {
                    handler (newValue, oldValue) {
                        console.log('isHot被修改了')
                        console.log(newValue, oldValue)
                    }
                }
            }
        })

(5) immediate属性设置为true就是初始化的时候让handler调一下

 (6)监视属性的另外一种写法:通过调用vm.$watch函数实现监视,第一个参数是'isHot', 第二个参数传入的是一个对象,与在vm中声明watch配置项中的对象是一样的

        vm.$watch('isHot', {
            immediate: true,
            // 什么时候调用handler 当isHot被修改的时候
            handler (newValue, oldValue) {
                console.log('isHot被修改了')
                console.log(newValue, oldValue)
            }
        })

(7)深度监视

  • Vue中的watch默认不监视对象内部值得改变,只监视一层
  • 通过配置deep:true 可以检测对象内部值的改变,实现深度监视(多层监视)
  • Vue自身可以检测对象内部值得改变,但是Vue提供的watch默认不可以
  • 使用watch时,根据数据的具体结构,决定是否采用深度监视
  • 如果不加deep:true的话,handler里面的逻辑是不会执行的
    <div id="root">
        <h3>a的值是{{numbers.a}}</h3>
        <button @click="numbers.a++">点我让a+1</button>
        <hr>
        <h3>b的值是{{numbers.b}}</h3>
        <button @click="numbers.b++">点我让b+1</button>
    </div>
    <script type="text/javascript">
        const vm = new Vue({
            el: '#root',
            data: {
                isHot: true,
                numbers: {
                    a: 1,
                    b: 1
                }
            },
            watch: {
                // 监视多级结构中某个属性的变化
                numbers: {
                    // 开启深度监视
                    deep: true,
                    handler () {
                        console.log('number改变了')
                    }
                }
            }
        })
    </script>

(8)如果配置项中只需要handler的时候就可以简写

            watch: {
                // 简写: 配置项中只需要handler的时候就可以简写
                isHot (newValue, oldValue) {
                    console.log('isHot被修改了', newValue, oldValue)
                }
            }


           // vm的写法  简写:只有handler
            vm.$watch('isHot', function (newValue, oldValue) {
                console.log('isHot被修改了', newValue, oldValue)
            })

三.监视属性和计算属性之间的关系

(1)计算属性computed能完成的功能,watch也能实现

(2)watch能实现的,computed不一定能实现,watch可以进行异步操作, computed靠的是返回值,没有办法实现异步任务, watch里面是直接通过手动修改

(3)两个小原则

  • 所有Vue管理的函数,最好写成普通函数,这样this的指向才是vm或者组件实例对象
  • 所有不被Vue管理的函数(定时器的回调,ajax的回调函数, promise的回调函数),最好写成箭头函数,这样this的指向才是vm或者组件实例对象
    const vm = new Vue({
        el:'#root',
        data: {
            firstName:'张',
            lastName:'三',
            fullName:'张-三'
        },
        // 能开启异步任务
        watch: {
            firstName(val) {
                setTimeout(()=> {
                    this.fullName = val + '-' + this.lastName
                }, 1000)
            },
            lastName(val) {
                this.fullName = this.firstName + '-' + val
            }
        }
    })

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

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

相关文章

银河麒麟安装solr及配置文件修改

下载并解压 将从官网下载的solr.tar.gz解压到目标文件夹 解压命令&#xff1a;tar -zxvf solr-xxx.tar.gz 修改配置文件 进入目录&#xff1a; /home/solr/solr-8.5.1/bin/init.d 修改solr文件里面部分配置 修改solr服务路径 SOLR_INSTALL_DIR"/opt/solr" 改为…

app稳定性测试-iOS篇

稳定性测试&#xff1a;测试应用程序在长时间运行过程中是否存在内存泄漏、崩溃等问题&#xff0c;以确保应用程序具有较高的稳定性和可靠性。 对于安卓端&#xff0c;官方提供了很好的稳定性测试工具&#xff1a;monkey。 相比较而言&#xff0c;iOS则没有&#xff0c;而且当前…

#systemverilog# 说说Systemverilog中《automatic》那些事儿(关于for循环内置变量研究)

#systemverilog# 说说Systemverilog中《static》那些事儿(理论篇1) 上面的截图,是来自于前面的文章,当时留下的疑问,今天和大家是实践一下小细节问题。 一 for 内置声明变量修饰 1.1 static 修饰

第八章浮点单元(Cortex-M7 Processor)

目录 浮点单元 8.1关于FPU 8.2FPU功能描述 8.2.1操作方式 8.2.2符合IEEE 754标准 8.2.3异常 8.3FPU编程器模型 浮点单元 介绍FPU (Floating Point Unit)。 它包含以下部分: 关于FPU的信息见8-2。FPU功能描述见8-3。FPU程序员模型在第8-5页。 8.1关于FPU Cortex-M7处…

基于RK3588+FPGA+AI算法定制的智慧交通与智能安防解决方案

随着物联网、大数据、人工智能等技术的快速发展&#xff0c;边缘计算已成为当前信息技术领域的一个热门话题。在物联网领域&#xff0c;边缘计算被广泛应用于智慧交通、智能安防、工业等多个领域。因此&#xff0c;基于边缘计算技术的工业主板设计方案也受到越来越多人的关注。…

【Kaggle】Kaggle数据集如何使用命令语句下载?

一、Kaggle数据集如何下载 1.1 问题的起因 最近看到了 Google 组织的 Kaggle 比赛&#xff0c;想自己试一下&#xff0c;但是数据集太大了&#xff0c;将近有370G的数据。直接下载的话&#xff0c;网速太慢&#xff0c;可能要下载3-4天&#xff0c;所以萌生了用命令语句下载的…

LeetCode刷题笔记-287题寻找重复数

LeetCode 287 寻找重复数 难度&#xff1a;中等 题目&#xff1a; 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返回…

fpga开发--蜂鸣器发出连续不同的音调

描述 使用fpga蜂鸣器连续发出do&#xff0c;re&#xff0c;mi&#xff0c;fa&#xff0c;so&#xff0c;la&#xff0c;xi七个不同的音调&#xff0c;每个音调的持续时间为0.5s。 思路 采用状态机实现音调的转化&#xff0c;当do状态持续了0.5s之后转移到re状态&#xff0c;…

c语言位段知识详解

本篇文章带来位段相关知识详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#xff01;&#xff01; 目录 一.什么是…

【SpringCloud Alibaba】(五)服务雪崩与容错方案

在前面的文章中&#xff0c;我们实现了用户微服务、商品微服务和订单微服务之间的远程调用&#xff0c;并且实现了服务调用的负载均衡。 但是&#xff0c;现在系统中存在着一个很明显的问题&#xff1a;那就是如果系统的并发量上来后&#xff0c;系统并没有容错的能力&#xf…

Onetable:统一的表格式元数据表示

概括 Onehouse 客户现在可以将他们的 Hudi 表查询为 Apache Iceberg 和/或 Delta Lake 表&#xff0c;享受从云上查询引擎到顶级开源项目的原生性能优化。 在数据平台需求层次结构的基础上&#xff0c;存在摄取、存储、管理和转换数据的基本需求。 Onehouse 提供这种基础数据…

C++库封装JNI接口——实现java调用c++

1. JNI原理概述 通常为了更加灵活高效地实现计算逻辑&#xff0c;我们一般使用C/C实现&#xff0c;编译为动态库&#xff0c;并为其设置C接口和C接口。用C实现的一个库其实是一个或多个类的简单编译链接产物。然后暴露其实现类构造方法和纯虚接口类。这样就可以通过多态调用到…

获取各省人口排名数据

目录 一、目标网址 二、网址分析 2.1、获取并解析网页内容 2.2 两种获取方法 三、获取目标数据 四、代码附件 一、目标网址 目标网址&#xff1a;中国人口排名 省份 1.1 网址截图 二、网址分析 2.1、获取并解析网页内容 我们需要使用requests库获取网页&#xff0c;使用…

三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询

目录 1.根据用户名或者token查询用户信息 会员信息实体类 统一状态Result类 controller层 service层及实现类 dao层 测试&#xff1a; 2.链表分页条件查询 会员等级实体类 封装条件类PageVo controller层 service层及实现类 dao层 Mapper.xml层 测试 vue前端参考 1.根据用户名…

多模态大模型(MLLM)之VisCPM:支持中文对话文图双向生成

2020 年 12 月发布的 CPM-1 是国内首个中文大模型 &#xff1b;2022 年 9 月发布的 CPM-Ant 仅微调 0.06% 参数就能超越全参数微调效果&#xff1b;2023 年 5 月发布的 WebCPM 是 中文首个基于搜索的问答开源模型。CPM-Bee 百亿大模型是团队最新发布的基座模型&#xff0c;中文…

基于springboot+mybatis+vue进销存管理信息系统

基于springbootmybatisvue进销存管理信息系统 一、系统介绍二、功能展示1.个人中心2.企业信息管理3.商品信息管理4.客户信息管理5.入库记录管理6.出库记录管理7.出库记录管理8.操作日志管理9.库存盘点管理 四、获取源码 一、系统介绍 系统主要功能&#xff1a; 普通用户&#…

为啥运营商现在严格规范网购流量卡的年龄了呢?20岁以下难了

本期知识点只讲流量卡&#xff0c;葫芦弟今天分享给大家手机流量卡开卡安全的问题。 很多朋友可能觉得电信诈骗离自己很远&#xff0c;但实际上现在已经出现大量收购电话卡用于诈骗的现象&#xff0c;而我们很可能在不知不觉中掉进犯罪分子的陷阱&#xff0c;触犯法律&#xff…

关于element ui 安装失败的问题解决方法、查看是否安装成功及如何引入

Vue2引入 执行npm i element-ui -S报错 原因&#xff1a;npm版本太高 报错信息&#xff1a; 解决办法&#xff1a; 使用命令&#xff1a; npm install --legacy-peer-deps element-ui --save 引入&#xff1a; 在main.js文件中引入 //引入Vue import Vue from vue; //引入…

C# Solidworks二次开发:自动创建虚拟零件及使用注意事项

今天要讲的是关于在solidworks中如何自动创建虚拟零件的功能&#xff0c;也就是solidworks中插入新零件这个功能。 实现这个功能需要使用的API如下所示&#xff1a; InsertNewVirtualPart&#xff08;swFaceOrPlane1, out swcomp2&#xff09;&#xff1b; 其中这个方法中使…

【动态规划part11】| 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

目录 &#x1f388;LeetCode123.买卖股票的最佳时机III &#x1f388;LeetCode188.买卖股票的最佳时机IV &#x1f388;LeetCode123.买卖股票的最佳时机III 链接&#xff1a;123.买卖股票的最佳时机III 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i…