vue修改计算属性的值_Vue语法高级之计算属性和侦听器

    计算属性和侦听器都可以监听到data区数据的变化,当数据变化时可以触发方法的调用,从而在方法内部可以进行相应的逻辑处理。

    计算属性的语法格式是:computed: {}

    侦听器的语法格式是:watch: {}

一、计算属性

    计算属性一般是为了简化模板中的内容,让模板中内容尽可能简洁。如果我们将太多的逻辑写在模板中,模板将会变得难以维护。

    下面举一反例,我们将字符串逆序的逻辑写在模板中。

<div id="app">  <div id="example">    {{ message.split('').reverse().join('') }}  div>div><script>  let vm = new Vue({    el: '#app',    data: {      message: 'Hello World'    }  })script>

    如果我们将字符串逆序的逻辑抽取到计算属性中,模板会更清晰,改造如下:

<div id="app">  <div id="example">    {{ resMsg }}  div>div><script>  let vm = new Vue({    el: '#app',    data: {      message: 'Hello World'    },    computed: {      resMsg() {        return this.message.split('').reverse().join('')      }    }  })script>

    我们在computed中声明了一个计算属性resMsg,通过这个属性来接收变量message逆序之后的值。

    火眼金睛的你应该发现了resMsg更像一个方法,而不像一个属性。这是因为计算属性的简写方式导致,不是它的原始样子,原始样子如下:

computed: {  resMsg: {    get() {      return this.message.split('').reverse().join('')    }  } }

    计算属性默认只有get方法,当只有get方法时,就可以进行简写。

    当然,如果有需要,我们可以为计算属性提供它的set方法,set方法在计算属性的值被修改时自动调用。这个特性一般在前后端交互时,数据格式不一致时会用到。比如时间、金钱等等在前后端的格式就通常不一样。

    我们以钱为例来说明一下set方法的应用场景。

    通常情况下,后端为了避开浮点数存储不精确的问题,会以分为单位进行整数存储。然而,前端在展示的时候,通常是以元为单位,这时两个单位就不一致,它们相差100倍。

    现在前端通过接口调用,拿到的钱是100分,赋值给cents变量,该值要转化成元在页面上展示,我们就可以声明一个yuan的计算属性去实现。当计算属性yuan被修改时,对应的分又要赋值到cents变量上,这时候set方法就派上用场了,代码如下

<div id="app">  分:{{cents}}  <hr>  元:{{yuan}}  <hr>  改变元:<input type="text" v-model="yuan">div><script>  let vm = new Vue({    el: '#app',    data: {      cents: 100    },    computed: {      yuan: {        get: function () {          return this.cents / 100;        },        set: function (newVal) {          this.cents = newVal * 100        }      }    }  })script>

    我们就通过set方法自动被调用的特性,在方法内部,将元转变成分,并赋值给cents变量。

    通常情况下,我们只会用到get方法,所以简写形式居多,但不要把它当做方法。它跟方法是不一样的,方法的每次调用,方法内部逻辑都会执行一遍。计算属性却不会,它具备基于依赖的缓存能力。下面例子来证实这个现象。

<div id="app">  <div>{{reverseMsg}}div>  <div>{{reverseMsg}}div>  <hr>  <div>{{reverseStr(msg)}}div>  <div>{{reverseStr(msg)}}div>div><script>  let vm = new Vue({    el: '#app',    data: {      msg: 'Hello'    },    computed: {      reverseMsg() {        console.log('computed')        return this.msg.split('').reverse().join('')      }    },    methods: {      reverseStr() {        console.log('method')        return this.msg.split('').reverse().join('')      }    }  })script>

    上面代码中,计算属性在模板中使用了两次,方法调用也使用了两次,我们查看打印发现

1f97011176c9856c31028ce1b8edf091.png

    方法中的打印语句执行了两次,而计算属性中的打印语句却只执行了一次。这就验证了,计算属性的简写形式虽然长得跟方法一模一样,但它确实不是方法。

二、侦听器

    侦听器也可以监听到data中的数据变化,当data中某个变量的数据发生变化时,对应的侦听器方法就会被执行,侦听器的方法名必须跟被侦听的变量名一样

<div id="app">  <label> 名:    <input type="text" v-model="firstName">  label>  <br>  <label> 姓:    <input type="text" v-model="lastName">  label>  <br>  {{fullName}}div><script>  let vm = new Vue({    el: '#app',    data: {      firstName: 'Jim',      lastName: 'Green',      fullName: 'Jim Green'    },    watch: {      firstName(val) {        console.log('firstName has changed')        this.fullName = val + ' ' + this.lastName      },      lastName(val) {        console.log('lastName has changed')        this.fullName = this.firstName + ' ' + val      }    }  })script>

    firstName(val)就是监听firstName变化时被调用的函数,lastName(val)就是监听lastName变化时被调用的函数。运行页面如下:

efd5bf95080892a5c500630c0fef613f.png

    当我们修改firstName的值时,firstName(val)方法就会被调用,并且新值会传递给val变量,我们利用新值可以去更新fullName变量。

    侦听器的应用场景通常是数据变化时需要执行异步操作开销较大的操作

总结

    计算属性和侦听器有相似之处,又有不同之处。相似之处是,它们都可以监听到数据的变化,从而执行自己的处理逻辑。但是它们的应用场景是不一样的,平常开发中,计算属性使用频率更高。

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

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

相关文章

三次hermite插值多项式例题_2点三次Hermite插值多项式解析.ppt

2点三次Hermite插值多项式解析1.问题的提法 分段三次Hermite插值多项式存在唯一 三.分段三次Hermite插值 2.分段三次Hermite插值的表达式 当 x∈[xi&#xff0c;xi1]时, 两点Hermite插值 ( i 0,1,2,,n-1) 定理&#xff1a; 设 f(x)在[a,b]上具有四阶连续导数&#xff0c;S3(x)是…

sqlserver查看索引_SQL Server页中行物理存储

SQL Server页有很多类型&#xff1a;1 – 数据页. 记录堆或者聚集索引叶子级的数据2 – 索引页. 用于保存聚集索引中的中间页和根页&#xff0c;或者非聚集索引的所有页3 – text mix page. A text page that holds small chunks of LOB values plus internal parts of text tr…

华为畅享max有没有人脸识别_华为手机有人脸识别功能吗?

展开全部华为5X有的1、请插e5a48de588b63231313335323631343130323136353331333365633837入手机卡&#xff0c;开启数据业务。第一次使用“人脸解锁”功能时&#xff0c;需要连接网络之后才可以激活。所以当第一次进入系统设置->安全->屏幕锁定中&#xff0c;可能会不能马…

c 语言 结构体 编程,C语言:结构体的编程问题(很简单)

C语言&#xff1a;结构体的编程问题(很简单)答案:2 信息版本&#xff1a;手机版解决时间 2020-07-25 02:18已解决2020-07-24 02:27先定义一个结构体Student&#xff0c;它包含四个成员&#xff1a;学号(number)、姓名(name)、电话(telphone)、地址(address)&#xff0c;然后定…

gin 怎么通过 post 发送结构体_Go Web 框架 Gin 实践12—优化配置结构及实现图片上传...

Go语言中文网&#xff0c;致力于每日分享编码、开源等知识&#xff0c;欢迎关注我&#xff0c;会有意想不到的收获&#xff01;项目地址&#xff1a;https://github.com/EDDYCJY/go-gin-example如果对你有所帮助&#xff0c;欢迎点个 Star 前言一天&#xff0c;产品经理突然跟你…

python次方运算_neg__python 魔术方法1 运算符重载

python中存在一些特殊的方法&#xff0c;这些方法通常采用格式&#xff1a;__method__()。这些方法会在特定的情况下自动调用。例如&#xff1a;__new__()、__init__()、__del__() 等生命周期方法。正是这些特殊方法&#xff0c;构建了python的语言风格。特殊方法有很多&#x…

resnet50网络结构_AAAI2020 | 利用网络结构关系加速NAS+Layer

这是我在海康威视研究院实习的工作&#xff0c;被AAAI-2020接收为Spotlight。论文地址&#xff1a;http://xxx.itp.ac.cn/pdf/2002.12580v1引子上一个阶段的网络结构搜索(NAS)研究&#xff0c;主要在两个方面。1)各类搜索方法&#xff0c;从强化学习、进化算法等到梯度下降&…

python 去除nan inf_Python实现半自动评分卡建模(附代码)

作者&#xff1a;Summer Memories个人公众号&#xff1a;风控汪的数据分析之路知乎专栏&#xff1a;小鑫的数据分析笔记这次分享一个自己写的python脚本&#xff0c;可以实现半自动化的评分卡建模。运行脚本时需要input已经预处理好的训练集和测试集数据&#xff0c;所以建模前…

国嵌c语言深度,国嵌C语言3部全

课程目录&#xff1a;国嵌 C语言深度剖析班&#xff1a;1课-基本数据类型分析2 auto,register,static分析3 if,switch,do,while,for分析4 goto,void,extern,sizeof分析5 const和volatile分析6 struct和union分析7课-enum和typedef分析8 注释符号9 接续符和转义符10 单引号和双引…

linux如何判断网线插入_“Linux”中如何判断哪个网卡连接网线?

展开全部【解决方法】1、ifconfig查看现在使用的网e68a84e8a2ad3231313335323631343130323136353331333365633935卡。2、ethtool命令查看网卡的具体信息,如eth0是连接状态&#xff0c;则正常使用。2、在ifconfig中可以看到有eth2这个网卡&#xff0c;但不知道是否连线&#xff…

单调有界定理适用于函数吗_《实变函数》——论有界变差函数

一日不见如隔三秋&#xff0c;本人觉得有界变差函数是实变函数中最容易理解且和高等数学联系最紧密的一个概念&#xff0c;其在概率论中也有非常广泛的应用&#xff0c;也和勒贝格空间有着千丝万缕的联系。什么叫有界变差函数&#xff1f;若在区间(a&#xff0c;b)中&#xff0…

msp430 c语言开发环境,如何使用C语言来编写MSP430的高质量代码

微处理器一般用于特定环境和特定用途,出于成本、功耗和体积的考虑&#xff0c;一般都要求尽量节省使用资源&#xff0c;并且&#xff0c;由于微处理器硬件一般都不支持有符号数、浮点数的运算&#xff0c;且运算位有限&#xff0c;因此&#xff0c;分配变量时必须仔细。另外要说…

oracle 增量设为3 循环_Oracle 差异性增量 和 累计增量 原理(转)

RMAN一个强大的功能是支持增量备份&#xff0c;增量备份中心思想就是减少备份的数据量&#xff0c;我们不需要在从头开始备份了&#xff0c;只需要备份自上次已备份之后的数据块即可。Oracle 9i 共有五种级别 0 1 2 3 4&#xff0c;0级最高-4级最低&#xff0c;0级是1级的基础以…

springboot redis 断线重连_Redis(9)——史上最强【集群】入门实践教程

一、Redis 集群概述Redis 主从复制到 目前 为止&#xff0c;我们所学习的 Redis 都是 单机版 的&#xff0c;这也就意味着一旦我们所依赖的 Redis 服务宕机了&#xff0c;我们的主流程也会受到一定的影响&#xff0c;这当然是我们不能够接受的。所以一开始我们的想法是&#xf…

智能指针的释放_看完这篇,别再说不会智能指针了

C智能指针一、智能指针的作用上一篇介绍了内存池的原理和实现&#xff0c;详情请见内存池设计与实现&#xff1b;内存池可以帮助我们有效的对内存进行管理&#xff0c;智能指针可以很方便的管理指针&#xff0c;避免出现内存泄漏&#xff1b;智能指针的作用智能指针的作用&…

c语言输出后面空格,新人提问:如何将输出时每行最后一个空格删除

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼如何将每行最后一个空格删除&#xff0c;使矩阵只有数字间有空格&#xff0c;没有多余空格&#xff1f;#include#includeint main(){int i,j,k,m,n,x,h,y;int a[15][15]{0};while(scanf("%d",&i)){k1;for(n1;n<i;…

pandas 日期比较大小_pandas处理日期时间,按照时间筛选

pandas有着强大的日期数据处理功能&#xff0c;本期我们来了解下pandas处理日期数据的一些基本功能&#xff0c;主要包括以下三个方面&#xff1a;按日期筛选数据按日期显示数据按日期统计数据运行环境为 windows系统&#xff0c;64位&#xff0c;python3.5。1 读取并整理数据首…

python中符号输入_Python基础(输入、运算符)

输入 1. python2版本中 1.1 使用 raw_input()函数&#xff0c; 看如下示例: password raw_input("请输入密码:") print &#xff08;您刚刚输入的密码是:%s, % password&#xff09; 运行结果:注意: raw_input()的小括号中放入的是&#xff0c;提示信息&#xff0c;…

c语言课程教学改革,C语言课程教学改革和实践.doc

C语言课程教学改革和实践C语言课程教学改革和实践程序设计课程在计算机科学(Computer Science&#xff0c; CS)专业新生的教学中起着相当基础的作用&#xff0c;CS专业包括计算机科学与技术、软件工程和网络工程。尽管近年来涌现了很多新的程序设计语言&#xff0c;如java&…

audio接线图解_图文:主板跳线(排线)连接技巧HD AUDIO连线接法

作为一名新手&#xff0c;要真正从头组装好自己的电脑并不容易&#xff0c;也许你知道CPU应该插哪儿&#xff0c;内存应该插哪儿&#xff0c;但遇到一排排复杂跳线的时候&#xff0c;很多新手都不知道如何下手。钥匙开机其实并不神秘还记不记得你次见到装电脑的时候&#xff0c…