热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

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

一、计算属性

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

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

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

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

{{ resMsg }} div>div> 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方法就派上用场了,代码如下

分:{{cents}}
元:{{yuan}}
改变元:div> 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方法,所以简写形式居多,但不要把它当做方法。它跟方法是不一样的,方法的每次调用,方法内部逻辑都会执行一遍。计算属性却不会,它具备基于依赖的缓存能力。下面例子来证实这个现象。

{{reverseMsg}}div>
{{reverseMsg}}div>
{{reverseStr(msg)}}div>
{{reverseStr(msg)}}div>div> 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中某个变量的数据发生变化时,对应的侦听器方法就会被执行,侦听器的方法名必须跟被侦听的变量名一样

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

efd5bf95080892a5c500630c0fef613f.png

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

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

总结

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



推荐阅读
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • Vue3中setup函数的参数props和context配置详解
    本文详细介绍了Vue3中setup函数的参数props和context的配置方法,包括props的接收和配置声明,以及未通过props进行接收配置时的输出值。同时还介绍了父组件传递给子组件的值和模板的相关内容。阅读本文后,读者将对Vue3中setup函数的参数props和context的配置有更深入的理解。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了在使用vue和webpack进行异步组件按需加载时可能出现的报错问题,并提供了解决方法。同时还解答了关于局部注册组件和v-if指令的相关问题。 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
author-avatar
mobiledu2502903113
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有