计算属性

在模板表达式中放入太多逻辑时,会让模板重且难以维护。比如:

// 错误示例
<div id="example">{{ message.split('').reverse().join('') }}
</div>

应该声明一个计算属性,该计算属性不用挂载到Vue实例的data上,而是在Vue实例中的computed上。程序员编写的函数将作用与 property.vm.reversedMessage 的 getter函数

具体看https://cn.vuejs.org/v2/guide/computed.html#%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7

计算属性缓存 VS 方法

  1. 相同点:同一个函数定义为方法或计算属性,两种方式的最终结果完全相同。
  2. 不同点:计算属性是基于它们的响应式依赖进行缓存的。

具体看https://cn.vuejs.org/v2/guide/computed.html#%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7

计算属性 VS 侦听属性

  1. 当有些数据需要随着其他数据变动而变动时,可以使用侦听属性。

计算属性的getter、setter

  1. computed 的属性可以被视为是 data 一样,可以 getter(读取)和 setter(设值),默认情况下 computed 预设只有 getter , 只能读取,不能改变设值。
// VUE.js 计算属性默认只有 getter, 因为是默认值所以我们也常常省略不写,如下代码:
computed: { fullName: function () { return this.firstName + ' ' + this.lastName } }// computed 里的代码完整的写法应该是:computed: { fullName: { get(){ return this.firstName + ' ' + this.lastName } } }

getter的触发时间

<template><div id="demo"><p> {{ fullName }} </p><input type="text" v-model="firstName"><input type="text" v-model="lastName"></div>
</template>var vm = new Vue({el: '#demo',data: {firstName: 'zhang',lastName: 'san'},computed: {fullName: function () {console.log('computed getter...')return this.firstName + ' ' + this.lastName}},updated () {console.log('updated')}
})

如果我们改变上边代码里的2个输入框的值firstName或者lastName,都会触发computed以及updated (),执行: console.log(‘computed getter…’)和console.log(‘updated’)

需要注意的是,不是说我们更改了getter里使用的变量,就会触发computed的更新,前提是computed里的值必须要在模板里使用才行。

如下代码,我们把template里的fullName 注释掉:

<template><div id="demo"><!-- <p> {{ fullName }} </p> --><input type="text" v-model="firstName"><input type="text" v-model="lastName"></div>
</template>var vm = new Vue({el: '#demo',data: {firstName: 'zhang',lastName: 'san'},computed: {fullName: function () {console.log('computed getter...')return this.firstName + ' ' + this.lastName}},updated () {console.log('updated')}
})

就算我们更改了firstName以及lastName都不会触发computed 中的 getter 中的console.log(‘computed getter…’),而只会触发console.log(‘updated’)

计算属性setter

<template><div id="demo"><p> {{ fullName }} </p><input type="text" v-model="fullName"><input type="text" v-model="firstName"><input type="text" v-model="lastName"></div>
</template>var vm = new Vue({el: '#demo',data: {firstName: 'zhang',lastName: 'san'},computed: {fullName: {//getter 方法get(){console.log('computed getter...')return this.firstName + ' ' + this.lastName},//setter 方法set(newValue){console.log('computed setter...')var names = newValue.split(' ')this.firstName = names[0]this.lastName = names[names.length - 1]return this.firstName + ' ' + this.lastName}}},updated () {console.log('updated')}
})

在template 中,我们可以看到,input 是直接绑 v-model=“fullName”,如果我们这里直接修改了fullName的值,那么就会触发setter,同时也会触发getter以及updated函数。其执行顺序是setter -> getter -> updated,如下:

console.log('computed setter...')
console.log('computed getter...')
console.log('updated')

这里需要注意的是,并不是触发了setter也就会触发getter,他们两个是相互独立的。我们这里修改了fullName会触发getter是因为setter函数里有改变firstName 和 lastName 值的代码。也就是说我们如果注释掉上边的setter中修改firstName 和lastName的代码后就不会执行getter,如下:

set(newValue){console.log('computed setter...')// var names = newValue.split(' ')//  this.firstName = names[0]//  this.lastName = names[names.length - 1]return this.firstName + ' ' + this.lastName}

会执行,且顺序如下

console.log('computed setter...')
console.log('updated')

Vue中computed 计算机属性、getter、setter相关推荐

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

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

  2. Vue中computed(计算属性)、methods、watch的区别

    初学vue,阅读api后,发现Vue提供了多种逻辑处理的方法,单纯的方法methods,computed(计算属性)以及watch等,充分理解这三者的区别,才能写出更加健壮的Vue代码. 1.meth ...

  3. vue 中 computed 计算属性 的用法

    计算属性实质就是一个方法,只不过在使用的时候只把方法名称作为属性使用,不需要加(),而不是当做方法使用. 只有计算属性的方法内部所用到的任何data中的数据发生变化,就会立刻重新计算这个计算属性的值. ...

  4. vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分

    vue中computed和watch的对比是一个很有意思的话题. 看过官网教程以后,我们往往更倾向多使用computed.computed优点很多,却在某些时候不太适用. 今天我们就稍微讨论一下,当我 ...

  5. vue方法调用失败后多次调用_浅析Vue中 computed / watch / methods的区别

    思考:请说下Vue中computed 和 watch 的区别( 面试题 ) 构造选项 computed / watch / methods computed ● computed 起初构想 在Vue的 ...

  6. Vue中computed分析

    Vue中computed分析 在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太 ...

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

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

  8. vue中computed的详细讲解

    vue中computed的详细讲解 1.定义 2.用法 3.computed的响应式依赖(缓存) 4.应用场景 1.定义 computed是vue的计算属性,是根据依赖关系进行缓存的计算,只有在它的相 ...

  9. Vue中computed原理

    1.computed大致流程 computed是vue中的计算属性,在依赖的值发生变化的时候进行重新计算,否则使用缓存. 而在面试中常被问及computed原理,这篇文章主要作为我学习computed ...

最新文章

  1. DB2 9 利用开辟(733 测验)认证指南,第 1 部分: 数据库工具与编程步调(6)
  2. 22首很棒的诗词欣赏,你相信这是AI的杰作吗?
  3. 关于mysql的一些问题_关于mysql的一些细节问题
  4. 【视觉盛宴三】不好意思,这些线材接口的横截面真的没见过
  5. [html] html5中的meta标签http-equiv属性有什么作用?
  6. 展望 | 2020年人工智能八大趋势
  7. elementui 单独修改一个label的样式
  8. 进入保护模式(八)简单OS内存使用分布
  9. 9.docker commit
  10. Hadoop原理——HDFS原理
  11. cad上样条曲线上的点太多了_CAD样条曲线如何转换成多段线?看完这篇文章你就懂了...
  12. 2079 ACM 选课时间 背包 或 母函数
  13. DirectAdmin教程-初级
  14. android 屏幕投射功能,安卓手机怎么投射屏幕?
  15. Android APP安装后不在桌面显示图标的应用场景举例和实现方法
  16. Linux模拟试题及答案(全)
  17. 2022 CCF BDCI 返乡发展人群预测 [0.9117+]
  18. 中国企业出海应尽早把握海外社交媒体运营红利-出海传播趋势的言灵视角
  19. 河南大学计算机专业就业率,2021考研择校择专业:河南大学就业率和薪酬情况...
  20. 第19节 三个败家子 19 ——史上最牛太守孙坚

热门文章

  1. 用汇编语言实现itoa函数
  2. Effective C# 原则22:用事件定义对外接口(译)
  3. HDU2191 珍惜现在,感恩生活【背包】
  4. EDUCoder编程练习题解(字符数组)
  5. Ubuntu中使用VS Code
  6. I00006 打印等腰三角形字符图案(底边在下)
  7. 心算技巧 —— 大数的三次方根
  8. AOP 基本术语及其在 Spring 中的实现
  9. 数学类网站、代码(Matlab Python R)、编程站点
  10. 高观点下的高等数学(数学分析、线性代数)