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,一经查实,立即删除!

相关文章

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…

搭建自己的Git服务器

环境 服务端&#xff1a;Ubuntu 22.04 客户端&#xff1a;Win11_x64 前提条件&#xff1a;需要确保在Windows机器上能够ping通Ubuntu服务器, 并且服务端与客户端均已安装了Git软件 服务端上的配置操作 以Ubuntu服务器作为Git服务端的运行环境&#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…

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

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

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

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

idea 里 controller service impl mapper xml 切换跳转快捷键

首先在controller层&#xff0c;对着接口点方法的方法上按着ctrl和鼠标左键&#xff0c;你会进入service层。 对着方法ctrlaltb不按鼠标&#xff0c;你会进入impl层。service层的方法上按ctrl和鼠标左键会回到controller&#xff0c;ctrlaltb不按鼠标也会进入到impl层,impl上的…

[Linux]线程基本知识

概念 进程 一个正在执行的程序&#xff0c;它是资源分配的最小单位 进程中的事情需要按照一定的顺序逐个进行 进程出现了很多弊端: 一是由于进程是资源拥有者&#xff0c;创建、撤消与切换存在较大的时空开销&#xff0c;因此需要引入轻型进程&#xff1b; 二是由于对称多…

C++:类和对象(下)---对类和对象深入一些的理解

文章目录 构造函数&#xff1f;初始化列表explicit关键字 匿名对象 构造函数&#xff1f; 初始化列表 前面已然介绍过构造函数&#xff0c;但并未完全结束&#xff0c;构造函数有很多种写法&#xff0c;有带缺省参数的&#xff0c;有全缺省的&#xff0c;不带缺省参数的…但用…

Linux下查找python路径

本地目前装了几个版本的python&#xff0c;这里记录下查找python路径的方法。 1&#xff1a;whereis命令 whereis python2&#xff1a;which命令 which python与whereis相似&#xff0c;但which会返回第一个找到的执行文件的位置。 3&#xff1a;find命令 find命令可以搜索系…

web流程自动化详解

今天给大家带来Selenium的相关解释操作 一、Selenium Selenium是一个用于自动化Web浏览器操作的开源工具和框架。它提供了一组API&#xff08;应用程序接口&#xff09;&#xff0c;可以让开发人员使用多种编程语言&#xff08;如Java、Python、C#等&#xff09;编写测试脚本&…

需求分析案例:消息配置中心

本文介绍了一个很常见的消息推送需求&#xff0c;在系统需要短信、微信、邮件之类的消息推送时&#xff0c;边界如何划分和如何设计技术方案。 1、需求 一个系统&#xff0c;一般会区分多个业务模块&#xff0c;并拆分成不同的业务系统&#xff0c;例如一个商城的架构如下&am…

day45-Netflix Mobile Navigation(左边侧边栏动态导航)

50 天学习 50 个项目 - HTMLCSS and JavaScript day45-Netflix Mobile Navigation&#xff08;左边侧边栏动态导航&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&…

33. 本地记事本

本地记事本 html部分 <button class"add"><i class"iconfont icon-jiahao"></i> </button>css部分 *{margin: 0;padding: 0; } body{background-color: #7bdaf3;display: flex;padding-top: 3rem;flex-wrap: wrap; } .add{pos…

每日一题——删除有序数组中的重复项

删除有序数组中的重复项 题目链接 注&#xff1a;本题所采用的方法是建立在移除元素的基础之上的&#xff0c;如果大家对双指针的方法不大了解&#xff0c;或者不会做《移除元素》这一题&#xff0c;建议先去看看&#x1f449;传送门 具体步骤 定义两个指针slow和fast&#…

【计算机网络】传输层协议 -- UDP协议

文章目录 1. 传输层相关知识1.1 端口号1.2 端口号范围划分1.3 知名端口号1.4 一些相关命令 2. UDP协议2.1 UDP协议格式2.2 UDP协议的特点2.3 什么是面向数据报2.4 UDP的缓冲区2.5 UDP使用注意事项2.6 基于UDP的应用层协议 1. 传输层相关知识 传输层是计算机网络中的一个重要层…