目录

1.计算属性

2.计算方法

3.深入理解计算属性


当需要使用大量逻辑时,若直接放在模板中会使得模板过重且难以维护,如下例

<div id="app">{{ message.split('').reverse().join('')}}
</div>
var vm = new Vue({el: '#app',data: {message: "It's a joke!"}
});

【结果】这里是想要显示变量message的反转字符串,而且,一旦我们想要在模板中多次使用翻转字符串时,会更加麻烦,所以,当我们处理复杂逻辑时,应该使用计算属性

1.计算属性

计算属性是Vue配置对象中的属性,使用方式如下:

<div id="app"><!-- 计算属性的值可以像data数据一样,直接使用 -->{{ reverseMsg }}
</div>
var vm = new Vue({el: '#app',data: {message: "It's a joke!"},computed:{reverseMsg: function () {//返回的值就是计算属性的值return this.message.split('').reverse().join('');}}
});

可以看到,reverseMsg 的值取决于message的值,所以当message更改时,reverseMsg 的值也会随之更改

2.计算方法

计算属性的功能也可以用方法实现,如下例

<div id="app">{{ reverseMsg() }}
</div>
var vm = new Vue({el: '#app',data: {msg: "It's a joke!"},methods: {reverseMsg: function(){return this.msg.split('').reverse().join('');}}
});

【注】虽然在表达式中调用方法和计算属性效果相同,但是二者有本质的区别:计算属性是基于响应式依赖进行缓存的,计算属性的值一直存于缓存中,只要它依赖的data数据不改变,每次访问计算属性,都会立即返回缓存结果,而不是再次执行函数。而方法则是每次触发重新渲染,调用方法总会再次执行函数。

当使用方法时,每一次页面重新渲染,对应的方法就会重新执行一次,如:

<div id="app"><p>{{ say }}</p><p>{{ reverseMsgM() }}</p><p>{{ reverseMsgC }}</p>
</div>
var vm = new Vue({el: '#app',data: {msg: "It's a joke!",say: "What a wonderful day!"},computed: {reverseMsgC() {console.log("执行计算属性")return this.msg.split('').reverse().join('');}},methods: {reverseMsgM: function(){console.log("执行方法")return this.msg.split('').reverse().join('');}}
});
vm.say = 'Life is a shit!'

【结果】由下图可以得知,reverseMsgM 比 reverseMsgC 多执行一次,因为当改变 say 的值时,页面会重新渲染,方法就会重新执行,而计算属性并没有这种现象。在实际使用时,当改动的数据与这个函数没有关系时,我们是不想让它重新执行的,如果函数内的逻辑很复杂,对性能也是一种消耗。

【问题】 为什么要进行缓存?

假设有一个计算属性A,它需要遍历一个巨大的数组并且做巨大的计算。然后我们需要使用到这个计算属性A,如果没有缓存,我们就会再次执行A的函数,这样性能开销就变得很大了。

3.深入理解计算属性

计算属性除了写成一个函数外,还可以写成一个对象,对象内部有两个属性,get和set,这两个属性均为函数,二者的 this 均自动绑定Vue实例,写法如下:

const vm = new Vue({el: '#app',computed: {fullName: {get() {//代码},set() {//代码}}}
})

当我们去获得某一个计算属性时,就会执行get函数,如下例:

<div id="app">{{ fullName }}
</div>
const vm = new Vue({el: '#app',data: {firstName: 'Tony',lastName: 'Stark'},computed: {fullName: {get() {console.log('执行get函数');return this.firstName + ' ' + this.lastName ;}}}
})

【结果】

set 函数是可选项,在给计算属性重新赋值时会执行,所传参数为重新设定的值

const vm = new Vue({el: '#app',data: {firstName: 'Tony',lastName: 'Stark'},computed: {fullName: {get() {console.log('执行get函数');return this.firstName + ' ' + this.lastName ;},set(name) {console.log('执行set函数');}}}
})
vm.fullName = 'Morgan';

【结果】

【注】由上面结果可以知道,即使给计算属性赋了值,计算属性也不会改变,只有当依赖的响应式属性变化了,计算属性才会重新计算,如下例

const vm = new Vue({el: '#app',data: {firstName: 'Tony',lastName: 'Stark'},computed: {fullName: {get() {console.log('执行get函数');return this.firstName + ' ' + this.lastName ;},set(name) {console.log('执行set函数');this.firstName = name;}}}
})
vm.fullName = 'Morgan';

【结果】

vue属性_computed(计算属性)methods(方法)相关推荐

  1. Vue——计算属性(计算属性简介、计算属性和方法的区别:(面试)、关于计算属性 函数什么情况下调用、案例)

    目录 计算属性(面试) 1.计算属性简介 2.计算属性和方法的区别:(面试) 3.关于计算属性 函数什么情况下调用​​​​​​​ 4.案例:购物车页面计算总价 计算属性(面试) 1.计算属性简介 把c ...

  2. 面试题!vue中的计算属性、方法、侦听属性

    1.计算属性 详细的内容可跳转至vue 计算属性 可以使用计算属性来代替在表达式中进行的复杂运算,以便于能够更方便的维护与复用逻辑. 计算属性是在选项对象中使用 computed 字段来定义. 特点: ...

  3. Vue 过滤器、计算属性、侦听器 图解版 一目了然

    文章目录 本篇学习目标 1. vue基础 1.0_vue基础 v-for更新监测 1.1_vue基础_v-for就地更新 1.2_vue基础_虚拟dom 1.3_vue基础_diff算法 情况1: 根 ...

  4. Vue基础之计算属性

    Vue基础之计算属性 定义: 原理: get函数执行时机: 优势: 备注: Demo: 定义: 要用的属性不存在,要通过已有属性计算得来. 原理: 底层借助了Objcet.defineproperty ...

  5. Vue中computed计算属性和data数据获取的问题

    获取到数据(对象.数组),截取一部分显示到页面中,用computed计算属性来实现截取数据然后直接输出到页面. <div class="detailBox"><h ...

  6. 003-读书笔记-Vue官网 计算属性与监听器

    1.计算属性 1-1 计算属性概述 计算属性也是 Vue 实例的属性,和 data 方法中返回的对象中的属性是等同的存在.通常来说,计算属性可以简单理解: 计算属性其实就是 Vue 实例的一个属性 计 ...

  7. [vue] 在使用计算属性的时,函数名和data数据源中的数据可以同名吗?

    [vue] 在使用计算属性的时,函数名和data数据源中的数据可以同名吗? 莫名其妙的问题.可以同名,但data会覆盖methods.并且本就不该同名,同名说明你命名不规范.然后解释为什么会覆盖,因为 ...

  8. [vue] watch和计算属性有什么区别?

    [vue] watch和计算属性有什么区别? 一个是侦听属性,一个是计算属性 2.一个是为了应对复杂的逻辑计算,一个是对数据的变化作出反应 3.一个是只有当缓存改变时才执行,一个是只要从新渲染就会执行 ...

  9. Swift面向对象基础(中)——Swift中的存储属性和计算属性

    1.存储属性:存储在类.结构体里的变量或者常量 2.分为:实例存储属性.类型存储属性 3.所有的存储属性必须显示的指定初始值,在定义时或者构造器当中指定 4.可选类型的存储属性可以不指定初始值 1 i ...

最新文章

  1. 懂语言者得天下:NLP凭什么被称为人工智能的掌上明珠?
  2. 《iOS 9应用开发入门经典(第7版)》——第2章,第2.4节小结
  3. 轻量级自动化运维工具Fabric的安装与实践
  4. PHP无刷新上传面向对象写法iframe
  5. 玩转oracle 11g(15):命令学习3
  6. qt在GUI显示时,将调试信息输出到控制台的设置
  7. Markdown引用图片,且不使用网上链接的解决方法
  8. Android阅读手札:第一行代码(第一章)
  9. 解析Disruptor:写入ring buffer
  10. ArcGIS地形图地形标注详解(附练习数据下载)
  11. Android APK 修改
  12. Excel突然出现很多小黑点
  13. 《Reducing Word Omission Errors in Neural Machine Translation:A Contrastive Learning Approach》论文阅读笔记
  14. Spring 实战(第 5 版)
  15. 【代码审计】--- php代码审计方法
  16. 蓝光影视媒体菜单结构浅析[原版加字幕保留花絮/主菜单/弹出菜单并分割对应PS3]...
  17. 高通Camera 软件工程师的成长之路
  18. shell脚本之双重循环
  19. JSSE(Java SecuritySocket Extension,Java安全套接字扩展)
  20. 从5G落地看2020年科技产业投资机会

热门文章

  1. PyCairo 后端
  2. 内联函数和编译器对Go代码的优化
  3. shell之常用工具的使用
  4. 【今晚7点半】:GVoice 千万在线语音传输的那些事
  5. ElasticSearch搜索语法进阶学习(搜索+聚合,过滤+聚合)
  6. IJCAI2019报告:基于无监督学习和图学习的大数据挖掘
  7. 谷歌开源MobileNets:在移动设备上高效运行的计算机视觉模型
  8. go 求两个时间相差的天数
  9. vscode关闭go语言的黄色波浪线
  10. 深入理解lua的协程coroutine