VUE10 计算属性
1 Vue计算属性简介
1)定义:我们需要一个属性,但是这个属性不存在,但是可以通过已有的属性计算得来,那么就可以定义一个计算属性。
2)原理:底层借助了Object.defineproperty方法提供的getter和setter
3)get什么时候调用 :
初次读取fullName时
所依赖的数据发生变化时
4)优势:与methods实现相比,内部有缓存机制(复用),效率更高,调用方便
5)其它
计算属性最终会出现在vm上,直接读取使用即可
计算属性默认只有 getter,不过在需要时你也可以提供一个 setter
计算属性和data属性都是属性-不能重名
2 场景演示
如下图,有两个输入框,一个标题,标题的值由第一个输入框和第二个输入框的值通过'-'拼接,并且每个输入框最多只取5个字符
2.1 使用v-bind实现
<body> <div id="root">
<input v-model="name" ></input> <br/><br/>
<input v-model="address" ></input> <br/> <br/>
<h1>{{name.slice(0,5)}}-{{address.slice(0,5)}}</h1> </div> <script type="text/javascript" >
const vm = new Vue({
el:'#root',
data:{
name:'历史',
address:'杭州'
}
}) </script>
</body>
2.2 使用函数实现
2.2.1 示例
<body> <div id="root">
<input v-model="name" ></input> <br/><br/>
<input v-model="address" ></input> <br/> <br/>
<h1>{{nameAndaddress()}}</h1> </div> <script type="text/javascript" >
const vm = new Vue({
el:'#root',
data:{
name:'历史',
address:'杭州'
},
methods: {
nameAndaddress(){
return this.name.slice(0,5) + '-' + this.address.slice(0,5)
}
},
}) </script>
</body>
2.2.2 示例2
标题变为三个
<body> <div id="root">
<input v-model="name" ></input> <br/><br/>
<input v-model="address" ></input> <br/> <br/>
<h1>{{nameAndaddress()}}</h1>
<h1>{{nameAndaddress()}}</h1>
<h1>{{nameAndaddress()}}</h1> </div> <script type="text/javascript" >
const vm = new Vue({
el:'#root',
data:{
name:'历史',
address:'杭州'
},
methods: {
nameAndaddress(){
console.log('nameAndaddress函数被调用')
return this.name.slice(0,5) + '-' + this.address.slice(0,5)
}
},
}) </script>
</body>
发现函数被调用了三次
2.3 使用计算属性
2.3.1 示例
计算属性中我们直接返回一个字符串,实际上它默认给我们定义了getter函数
<body> <div id="root">
<input v-model="name" value="张三"></input> <br/><br/>
<input v-model="address" value="杭州"></input> <br/>
<h1>{{nameAddress}}</h1> </div> <script type="text/javascript" > const vm = new Vue({
el:'#root',
data:{
name:'历史',
address:'杭州'
},
computed:{
nameAddress(){
return this.name.slice(0,5) + "-" + this.address.slice(0,5)
}
}
}) </script>
</body>
完整写法
<body> <div id="root">
<input v-model="name" value="张三"></input> <br/><br/>
<input v-model="address" value="杭州"></input> <br/>
<h1>{{nameAddress}}</h1> </div> <script type="text/javascript" > const vm = new Vue({
el:'#root',
data:{
name:'历史',
address:'杭州'
},
computed:{
nameAddress:{
get(){
console.log('getter调用')
return this.name.slice(0,5) + "-" + this.address.slice(0,5)
} }
}
}) </script>
</body>
我们可以发现,getter函数在初始化的时候被调用一次,在两个输入框的值改变的时候也被调用了,因为getter函数会在所依赖的数据发生变化时被调用
2.3.2 计算属性的缓存机制
把标题变为三个
<body> <div id="root">
<input v-model="name" value="张三"></input> <br/><br/>
<input v-model="address" value="杭州"></input> <br/>
<h1>{{nameAddress}}</h1>
<h1>{{nameAddress}}</h1>
<h1>{{nameAddress}}</h1> </div> <script type="text/javascript" > const vm = new Vue({
el:'#root',
data:{
name:'历史',
address:'杭州'
},
computed:{
nameAddress:{
get(){
console.log('getter调用')
return this.name.slice(0,5) + "-" + this.address.slice(0,5)
} }
}
}) </script>
</body>
发现getter函数值调用了一次。因为计算属性采用了缓存机制
计算属性是基于它们的依赖项的值结果进行缓存的,只要依赖的变量不变, 都直接从缓存取结果
2.4 比较三种方法的优劣
第一种:直接使用数据绑定
看起来比较方便。但是,我们对于模板的要求是尽量清晰简洁。在{{}}进行处理,如果更复杂一点,就会放入过多的代码,有悖于这个原则。
代码复用性低。
第二种:函数
没有缓存机制
第三章:计算属性
有缓存机制
3 vue计算属性语法
3.1 完整语法
computed: {
计算属性名: {
set(值){ },
get(){
return 值
}
}
}
3.2 简写语法
只有getter函数的时候
computed: {
计算属性名(){
return xxx
}
}
4 完整写法的示例
<body> <div id="root">
<input v-model="name"></input> <br/><br/>
<input v-model="address" ></input> <br/>
<input v-model="nameAddress"></input> </div> <script type="text/javascript" > const vm = new Vue({
el:'#root',
data:{
name:'历史',
address:'杭州'
},
computed:{
nameAddress:{
get(){
console.log('getter调用')
return this.name.slice(0,5) + "-" + this.address.slice(0,5)
},
set(value){
console.log(value)
this.name='heiheihei'
this.address='xixixi'
} }
}
}) </script>
</body>
VUE10 计算属性的更多相关文章
- Vue - 在v-repeat中使用计算属性
1.从后端获取JSON数据集合后,对单条数据应用计算属性,在Vue.js 0.12版本之前可以在v-repeat所在元素上使用v-component指令 在Vue.js 0.12版本之后使用自定义元素 ...
- Vue之计算属性
上一篇里演示了计算属性的优点,但是,computed和data里的属性还是有区别的,computed的一个弱点就在于依赖于data属性的更新,才能触发视图更新. 举个例子: 上个例子中谈到用v-for ...
- 关于vue.js的计算属性练习代码
参照官网联系如下: <!DOCTYPE html><html lang="en"><head> <meta charset="U ...
- Vue 过滤器与计算属性
过滤器 V1.x 版本 过滤器基础 过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数.Vue有很多很便利的过滤器,可以参考官方文档,http://cn.vuejs.org/ ...
- 第三节:Vue计算属性
计算属性就是当其依赖的属性的值发生变化的时候,这个属性的值就会自动更新. 例子: <!DOCTYPE html> <html> <head> <meta ch ...
- Vue#计算属性
在模板中表达式非常便利,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需要多于一 ...
- Vue.js基本规则提炼总结及计算属性学习
Vue.js基本须知: 1)以“{{}}”格式 “Mustache” 语法(双大括号)来绑定表达式输出文本值; 2)以“{{{}}}”格式绑定原始的html,绑定的表达式内为字符串格式的html内容, ...
- Vue计算属性
github地址:https://github.com/lily1010/vue_learn/tree/master/lesson06 一 计算属性定位 当一些数据需要根据其它数据变化时,这时候就需要 ...
- Swift面向对象基础(中)——Swift中的存储属性和计算属性
学习来自<极客学院> 1.存储属性:存储在类.结构体里的变量或者常量 2.分为:实例存储属性.类型存储属性 3.所有的存储属性必须显示的指定初始值,在定义时或者构造器当中指定 4.可选类型 ...
- Vue.js学习 Item5 -- 计算属性computed与$watch
在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需 ...
随机推荐
- eBPF 实践 -- 网络可观测
简介 观测云采集器,是一款开源.一体式的数据采集 Agent,它提供全平台操作系统支持,拥有全面数据采集能力,涵盖基础设施.指标.日志.应用性能.用户访问以及安全巡检等各种场景.通过 eBPF 技术的 ...
- 基于python的数学建模---蒙特卡洛算法
import math import random m = input('请输入一个较大的整数') n = 0 for i in range(int(m)): x = random.random() ...
- C#微信公众号关注二维码生成、密文方式
文章说明:是公众号使用自己服务器的处理的其中一篇关注二维码信息处理 1.流程 1.1 需知 全局返回码:这个必须要哦.不然调试的时候接口出的错误怎么处理呢. (闲话:博客的随笔只能添加也给超链呀, ...
- dp状态设计
迎接仪式 题目描述 LHX 教主要来 X 市指导 OI 学习工作了.为了迎接教主,在一条道路旁,一群"Orz 教主 er"穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一 ...
- 手动安装Mysql数据库,适合重装系统和绿色安装。
依次输入命令: d:cd D:\MySQL Server 5.6\bin 根据自己的目录设置 mysqld --install mysql4001 --defaults-file="D:\m ...
- 深入浅出学习透析 Nginx 服务器的基本原理和配置指南「运维操作实战篇」
Nginx前提回顾 Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: Web服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效 ...
- Java基础知识篇【gitee】
https://snailclimb.gitee.io/javaguide 一.Java基本功 Java一次编译,字节码通过JVM,处处运行jsp会转化为servlet,也要由jdk编译OracleJ ...
- 【JVM】经典垃圾回收器
本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 转载请在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益.让我们一起维护 ...
- java中继承的内存分析
本文主要讲述java中继承的内存分析. 示例1,代码如下: public class EncapsulationTest { public static void main(String[] args ...
- 关于RESTful 的使用(实战)
今天在博客园首页看到一篇关于写 RESTful, 大致就是前端定义的一种规范. 原文如下, https://www.cnblogs.com/zhangmumu/p/11936262.html 看了一圈 ...