简述Vue中的计算属性
1、什么是计算属性
- 如果模板中的表达式存在过多的逻辑,那么模板会变得臃肿不堪,维护起来也异常困难,因此为了简化逻辑出现了计算属性;
<template>
<div id="example">
<p>{{message.split(" ").reverse().join('!')}}</p>
</div>
</template>
<script>
export default {
name: "example",
data() {
return {
message : 'i am chinese person'
};
},
methods : { },
mounted(){ }
};
</script>上述表达式比较繁琐,因此我们采用计算属性实现
- 特点:在一个计算属性里可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果就可以;
<template>
<div id="example">
<p>源数据:{{message}}</p>
<p>更改后的数据:{{changeMessage}}</p>
</div>
</template>
<script>
export default {
name: "example",
data() {
return {
message : 'i am chinese person'
};
},
computed : {
//getter方法
changeMessage : function(){//无需进行声明
return this.message.split(" ").reverse().join('!')
}
}
};
</script>结果为:

- 计算属性拥有的两个方法:getter setter 用来实现数据的双向绑定
<template>
<div id="example">
<p>给定以下三个词语组成一句话</p>
<span>{{combine}}</span>
<span>{{mom}}</span>
<span>{{dad}}</span>
<p style="padding:12px 0">答案为:{{result}}</p>
<button @click="btn">改变语句</button>
</div>
</template>
<script>
export default {
name: "example",
data() {
return {
mom: "妈妈",
dad: "爸爸",
combine: "组成了一个家"
};
},
computed: {
result : {//与不写get set方法的形式有区别
//一个计算属性的getter
get : function(){//三个值变化的时候,result的值会自动更新,也会自动更新DOM结构
return this.mom + this.dad + this.combine
},
// 一个计算属性的setter
set : function(newVal){//当设置result的时候,其他的值也会相应的发生改变
this.mom = newVal.substr(0,2);
this.dad = newVal.substr(2,2);
this.combine = newVal.substr(4)
}
}
},
methods : {
btn(){
this.result = "医生警察为人民服务"
}
}
};
</script>首次渲染结果为:

点击按钮结果为:

2、计算属性缓存(最大的特点)-----属性变化才执行getter函数,否则使用缓存 默认为true使用缓存
- 作用:如果频繁的使用计算属性,而计算属性方法中有大量的耗时操作(例如getter中循环一个大的数组以执行很多操作),会带来一些性能问题;
<template>
<div id="example">
<p>给定以下三个词语组成一句话</p>
<span>{{combine}}</span>
<span>{{mom}}</span>
<span>{{dad}}</span>
<p style="padding:12px 0">答案为:{{result}}</p>
<button @click="btn">改变语句</button>
</div>
</template>
<script>
export default {
name: "example",
data() {
return {
mom: "妈妈",
dad: "爸爸",
combine: "组成了一个家"
};
},
computed: {
result : {//与不写get set方法的形式有区别
//一个计算属性的getter
cache: true,//打开缓存
get : function(){//三个值变化的时候,result的值会自动更新,也会自动更新DOM结构
return new Date().getTime() + this.mom + this.dad + this.combine
},
// 一个计算属性的setter
set : function(newVal){//当设置result的时候,其他的值也会相应的发生改变
this.mom = newVal.substr(0,2);
this.dad = newVal.substr(2,2);
this.combine = newVal.substr(4)
}
}
},
methods : {
btn(){
this.result = "医生警察为人民服务"
}
}
};
</script>
3、使用过程中遇到的问题
- 计算属性getter不执行的场景
- 当包含计算属性的节点被移除并且模板当中其他地方没有在引用该属性时,对应的getter不会再执行;
<template>
<div id="example">
<button @click="btn">总价格的显示隐藏</button>
<p v-if="showTotal">总价格是:{{totalPrice}}</p>
</div>
</template>
<script>
export default {
name: "example",
data() {
return {
showTotal : true,
basePrice : 100,
};
},
computed: {
totalPrice : {
get : function(){
return this.basePrice * 99
}
}
},
methods: {
btn(){
this.showTotal = !this.showTotal
}
}
};
</script>在本程序中,p元素移除后,计算属性在别的地方不会再被使用,因此getter方法不会被执行;若每次都不执行,请加入缓存cache:false
- 当节点移除,其他地方使用计算属性时:
<template>
<div id="example">
<p>{{totalPrice}}</p>
<button @click="btn">总价格的显示隐藏</button>
<p v-if="showTotal">总价格是:{{totalPrice}}</p>
</div>
</template>
<script>
export default {
name: "example",
data() {
return {
showTotal : true,
basePrice : 100,
};
},
computed: {
totalPrice : {
cache : false,
get : function(){
console.log(1)
return this.basePrice * 99
}
}
},
methods: {
btn(){
this.showTotal = !this.showTotal
}
}
};
</script>每次都执行getter
- 当包含计算属性的节点被移除并且模板当中其他地方没有在引用该属性时,对应的getter不会再执行;
简述Vue中的计算属性的更多相关文章
- Vue学习之vue中的计算属性和侦听器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue中的计算属性与$watch
计算属性:在模板中绑定表达式是非常便利的,但是他们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么vue.js将绑定表达式限制为一个表达式. ...
- Vue中的计算属性和监听器(computed 与 watch)
react中数据是单向绑定的,而vue中数据是双向绑定的.为什么? 在react中,主要是通过setState 去改变state的值:而在vue中,会自动的触发set 与get 改变属性的值. 在vu ...
- 浅谈vue中的计算属性和侦听属性
计算属性 计算属性用于处理复杂的业务逻辑 计算属性具有依赖性,计算属性依赖 data中的初始值,只有当初始值改变的时候,计算属性才会再次计算 计算属性一般书写为一个函数,返回了一个值,这个值具有依赖性 ...
- 怎样理解 Vue 中的计算属性 computed 和 methods ?
需求: 在 Vue 中, 我们可以像下面这样通过在 引号 或 双花括号 内写 js 表达式去做一些简单运算, 这是可以的, 不过这样写是不直观的, 而且在 html 中 夹杂 一些运算逻辑这种做法其实 ...
- Vue中computed(计算属性)、methods、watch的区别
实现效果:字符串的动态拼接 methods方法 html: <div id="app"> <!-- 监听到文本框数据的改变 --> <input ty ...
- Vue中的计算属性
一.什么是计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护. 二.计算属性的用法 在一个计算属性里可以完成各种复杂的逻辑,包括运算.函 ...
- Vue中computed计算属性
话不多说,使用方法直接上代码//在模板中调用computedTest这个函数,切记不要在函数后添加()<template> <div class="home"&g ...
- vue中computed计算属性与methods对象中的this指针
this 指针问题 methods与computed中的this指针 应该指向的是它们自己,可是为什么this指针却可以访问data对象中的成员呢? 因为new Vue对象实例化后data中的成员和c ...
随机推荐
- keepalived容灾方案,实现nginx负载均衡主从架构(1)
一:环境准备:4台nginx服务器,两台用yum安装,两台使用源码安装 第一步:使用yum安装nginx服务器,在浏览器输入ip,可以显示以下内容,这步比较简单,安装好修改/usr/share/ngi ...
- Linux架构之Nginx 动静分离
案例No.51:Nginx动静分离 1.web01配置静态资源 [root@web01 ~]# cd /etc/nginx/conf.d/#配置静态资源[root@web01 conf.d]# cat ...
- vector存放结构体数据的2种方法
如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式. 方式一:放入这个结构体类型变量的副本. 方式二:放入指向这个结构体类型变量的指针. 假设结构体类型变量是这样的, typedef ...
- zookeeper之二 zkCli客户端命令
ZooKeeper命令行界面(CLI)用于与ZooKeeper集合进行交互以进行开发.它有助于调试和解决不同的选项.要执行ZooKeeper CLI操作,首先打开ZooKeeper服务器(“bin/z ...
- FAT12 img tool
NJU/2019/OS Description: CODE: Main.cpp: /* @author: Edwin Xu @Date:2019/11/13 @Note: just ASCII */ ...
- x86-x64寄存器及CallStack调用栈
Intel 32位体系结构(简称IA32)处理器包含8个通用寄存器,如下图所示: EIP是指令寄存器,指向处理器下条等待执行的指令地址(代码段内的偏移量),每次执行完相应汇编指令EIP值就会增加.EI ...
- 如何在vue中引入图片?
当我们在Vue.js项目中引用图片时,关于图片路径有以下几种情形: 使用一. 我们在data里面定义好图片路径 imgUrl:'../assets/logo.png' 然后,在template模板里面 ...
- POJ2942 UVA1364 Knights of the Round Table 圆桌骑士
POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则 ...
- 多对多关系表的创建方式、forms组件
目录 多对多关系表的三种创建方式 1.全自动,Django自动创建 2.纯手撸 3.半自动(推荐使用) forms组件 小例子 forms组件 校验器 钩子函数 局部钩子 全局钩子 forms组件常用 ...
- linux-LVM磁盘扩容
查看磁盘 [ops@stock_kline_database ~]$ sudo fdisk -l 磁盘 /dev/sda: 字节, 个扇区 Units = 扇区 of * = bytes 扇区大小(逻 ...