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

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的写法  简写:只有handlervm.$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.mzph.cn/news/12770.shtml

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

相关文章

Redis Sentinel 及 Redis Cluster

Redis Sentinel Redis-Sentinel(哨兵模式)是Redis官方推荐的高可用性(HA)解决方案&#xff0c;当用Redis做Master-slave的高可用方案时&#xff0c;假如master宕机了&#xff0c;Redis本身(包括它的很多客户端)都没有实现自动进行主备切换&#xff0c;而Redis-sentinel本身也是…

day47-SSM分页

SSM分页&#xff08;增删改查登录注册&#xff09; applicationContext.xml中加入mybatis-config.xml路径 mybatis-config.xml Mapper接口 Service接口及其实现类 Mapper.xml page.jsp personDetail.jsp addPerson.jsp updatePerson.jsp login.jsp regist…

正则表达式简略记录

1、元字符&#xff1a; . ------- 匹配除换行符外的任意字符 \w ------- 匹配字母或数字或下划线或汉字 \s ------- 匹配任意的空白符 \d ------- 匹配数字 \b ------- 匹配单词的开始或结束 ^ ------- 匹配字符串的开始 $ ------- 匹配字符串的结束 2、字符转义 \ 3、重复次…

Java、Java EE、Spring和Spring Boot核心注解

简介 文章迁移至个人博客 此页面包含常用 Java、Java EE、Spring、 Spring Boot、JPA 常用注解的一站式说明。 Spring核心注解 Component注解 Component 注解表明被注解的类是一个“spring bean/组件”。Component注解告诉Spring容器自动创建Spring bean。 Autowired注解 …

搭建自己的Git服务器

环境 服务端&#xff1a;Ubuntu 22.04 客户端&#xff1a;Win11_x64 前提条件&#xff1a;需要确保在Windows机器上能够ping通Ubuntu服务器, 并且服务端与客户端均已安装了Git软件 服务端上的配置操作 以Ubuntu服务器作为Git服务端的运行环境&#xff0c;并方便后期免密推…

kafka消费报错卡死:内存溢出OutOfMemoryError: Java heap space

文章目录 现象排查解决 现象 我们信控平台使用Java语言开发&#xff0c;Spring Cloud微服务架构&#xff0c;采用容器化部署&#xff0c;所有服务都部署在docker里面&#xff0c;使用docker-compose进行管理&#xff0c;使用portainer进行监控平台部署客户现场后&#xff0c;一…

如何做好IT类的技术面试

目录 一、IT行业的招聘渠道 二、如何做好技术面试官 三、谈谈IT行业如何做好招聘工作 四、面试IT公司的小技巧 五、面试有哪些常见的问题 六、关于面试的一些建议 面试可能是我们每个人都必须会遇到的事情&#xff0c;而技术面试更具有专业性&#xff0c;以下会从几个方面…

openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符

文章目录 openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符23.1 时间日期操作符23.2 时间/日期函数23.3 TIMESTAMPDIFF23.4 EXTRACT23.5 date_part openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符 23.1 时间日期操作符 用户在使用时…

【Java 高频面试闯关秘籍】大梦谁先觉,平生我自知

一、mysql使用innodb引擎&#xff0c;请简述mysql索引的最左前缀如何优化orderby语句&#xff1f; 关键点&#xff1a; &#xff08;1&#xff09;如果排序字段不在索引列上&#xff0c;filesort有两种算法&#xff1a;mysql就要启动双路排序和单路排序 &#xff08;2&#x…

【系统监控程序】

用python编写一个系统监控程序&#xff0c;需要每隔一秒钟记录系统每个进程的资源占用和整体的资源占用情况&#xff0c;并输出成json&#xff0c;保存到文本文件。 import psutil import json import timedef get_process_usage():process_list []for proc in psutil.proces…

系统资源监控程序的改进

当需要监控硬盘读写和网络传输时&#xff0c;我们可以进一步使用psutil库来获取这些信息。以下是修改后的示例程序&#xff0c;增加了对硬盘读写和网络传输的监控&#xff1a; import psutil import json import timedef get_process_usage():process_list []for proc in psu…

解决分类任务中数据倾斜问题

大家好&#xff0c;在处理文本分类任务时&#xff0c;基准测试流行的自然语言处理架构的性能是建立对可用选项的理解的重要步骤。在这里&#xff0c;本文将深入探讨与分类相关的最常见的挑战之一——数据倾斜。如果你曾经将机器学习&#xff08;ML&#xff09;应用于真实世界的…

React Native RN state props

state&#xff1a; 是RN 专门用来标识是否重新渲染&#xff0c;通过属性的值来更新数据&#xff0c;React 内部会监听 state 的变化&#xff0c;一旦发生变化就会主动触发组件的 render() 方法来更新 Dom 结构&#xff0c;另外state是组件私有的&#xff0c;是没有办法通过其他…

VS+QT+PCL点云显示转网格表面体窗体实现

程序示例精选 VSQTPCL点云显示转网格表面体窗体实现 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQTPCL点云显示转网格表面体窗体实现>>编写代码&#xff0c;代码整洁&…

正则表达式常用字符及案例

引言 正则表达式是一种强大而灵活的工具&#xff0c;它在文本搜索和处理中起到了至关重要的作用。熟练掌握正则表达式的常用字符和使用方法&#xff0c;将能帮助开发者更加高效地进行模式匹配和字符串操作。本文将介绍一些常见的正则表达式字符&#xff0c;并给出一些实际案例…

watch避坑,使用computed进行处理数据

业务场景&#xff1a;在vue中监听el-input 中的字数有没有超过60&#xff0c;如果超过60字时将60后面的字变为 “>>” 符号&#xff0c;以此实现预览苹果手机推送摘要场景。 错误&#xff1a;开始的逻辑是使用watch监听&#xff0c;检查length超过60直接 加上符号&#x…

python 网络编程

TCP编程 客户端 创建TCP连接时&#xff0c;主动发起连接的叫做客户端&#xff0c;被动响应的叫做服务端。当定义一个Socket表示打开一个网络连接&#xff0c;创建一个Socket需要知道目标计算机的IP地址和端口号和对应的协议类型。 # 导入socket库: import socket# 创建一个s…

基于MSP432P401R爬坡小车【2020年电赛C题】

文章目录 一、任务清单1. 硬件部分2. 软件部分 二、OpenMV巡线三、舵机转向四、停止线识别五、技术交流 一、任务清单 1. 硬件部分 主控板&#xff1a; MSP432P401R数据显示&#xff1a; OLED电机&#xff1a; 霍尔编码器电机电池&#xff1a; 7.3V航模电池巡线&#xff1a; …

图像中不规则物体的长轴与短轴:OpenCV实现指南

1.首先&#xff0c;读取图像并将其转换为灰度图像。 2.进行图像预处理&#xff0c;包括使用高斯模糊和阈值化&#xff0c;以便更好地处理图像。 3.通过使用OpenCV的cv2.findContours()函数&#xff0c;找到图像中的所有轮廓。 4.遍历所有轮廓&#xff0c;如果轮廓点的数量大…

使用ajax进行前后端交互的方法

使用ajax进行前后端交互的方法&#xff1a;&#xff08;我只测试通了json对象作为参数的方式&#xff0c;其他方式我没有测试通过&#xff09; 1、前端方法&#xff1a; 传参方式&#xff1a;POST 请求类型&#xff1a;json对象 响应类型&#xff1a;json对象 function test() …