Vue基础之计算属性
适用场景
设想一个场景,你需要得到一个复杂运算/逻辑的返回值,利用模板内的表达又过长且难以阅读和维护,这时计算属性就可以很好的解决你的问题。看下面的例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>computed</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{message.split(' ').reverse().join(' ')}}
</div>
<script>
new Vue({
el: "#app",
data () {
return {
message: 'Hello world!'
}
}
})
</script>
</body>
</html>
{{message.split(' ').reverse().join(' ')}}这个表达式共进行了三种操作,但看起来并不是很清晰,并且当我们想在其他地方也用到最终值时就需要复制、粘贴冗长的一大段代码,所以这时候计算属性就可以及时的发挥它巨大的作用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>computed</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{reverseText}}
<hr>
{{reverseText}}
<hr>
{{reverseText}}
</div>
<script>
new Vue({
el: "#app",
data () {
return {
message: 'Hello world!'
}
},
// 计算属性
computed: {
reverseText () {
return this.message.split(' ').reverse().join(' ')
}
}
})
</script>
</body>
</html>
这时,我们就可以轻松应用结果在多个地方,而且代码还看起来更清晰了。
使用方法
在计算属性computed里可以完成各种复杂的逻辑(运算、函数调用),所有的计算属性以函数的形式写在computed里,最终返回计算结果,当message(data数据)有任何变化,计算属性会同时更新,并且更新视图。
每个计算属性都包括getter和setter,我们平时默认用到的是getter来读取。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>computed</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
姓:{{firstName}}
<hr>
名:{{lastName}}
<hr>
姓名:{{fullName}}
</div>
<script>
new Vue({
el: "#app",
data () {
return {
firstName: '铁柱',
lastName: '李'
}
},
computed: {
fullName: {
// getter
get: function() {
return this.lastName + this.firstName
},
// setter
set: function (data) {
let name = data.split(' ')
this.firstName = name[name.length - 1]
this.lastName = name[0]
}
}
}
})
</script>
</body>
</html>
默认调用时是用fullName的getter方法读取数据,想使用set方式时:
<div id="app">
姓:{{firstName}}
<hr>
名:{{lastName}}
<hr>
姓名:{{fullName = '一 枚蛋Oops'}}
</div>
计算属性缓存
有人有可能会问,为什么不使用methods直接函数调用,这里就要区分一下他们的区别了
methods:只要重新渲染就会更新,函数就会执行。
computed:计算属性依赖的数据变化时,它才会重新取值,只要依赖数据不变化,它就不更新,可以缓存数据。
所以到底使用哪个属性是依据你的项目需求,看看你需不需要缓存。
以上是本期全部内容,欲知后事如何,请听下回分解<( ̄︶ ̄)↗[GO!]
Vue基础之计算属性的更多相关文章
- 03 . Vue基础之计算属性,组件基础定义和使用
vue组件 fetch请求组件 fetch XMLHttpRequest是一个设计粗糙的API, 配置和调用方式非常混乱,而且基于事件的异步模型写起来不友好,兼容性不好. <!DOCTYPE h ...
- Vue学习之--------计算属性(2022/7/9)
文章目录 1.计算属性 1.1 计算属性实现 1.1.1 基础知识 1.1.2 代码实例 1.1.3 测试效果 1.2 计算属性简写 1.2.1 简写代码 1.3 使用插值语法实现 1.3.1 代码实 ...
- Vue的computed计算属性是如何实现的
一个开始 有如下代码,full是一个计算属性,开始,他的值是'hello world',1s后,msg变成了‘I like’, full的值同步变成了'I like world';其原理解析来看一下. ...
- Vue学习之vue中的计算属性和侦听器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue.js 源码分析(六) 基础篇 计算属性 computed 属性详解
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护,比如: <div id="example">{{ messag ...
- Vue 过滤器与计算属性
过滤器 V1.x 版本 过滤器基础 过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数.Vue有很多很便利的过滤器,可以参考官方文档,http://cn.vuejs.org/ ...
- 关于vue.js的计算属性练习代码
参照官网联系如下: <!DOCTYPE html><html lang="en"><head> <meta charset="U ...
- vue学习笔记 计算属性(四)
计算属性就是vue实例里的computed属性,对应一个对象,里面可以放各种方法,方法的作用就是可以生成和数据变量对应的计算后的变量,跟数据相关的复杂逻辑变量,都可以使用计算属性实现,computed ...
- 关于vue的使用计算属性VS使用计算方法的问题
在vue中需要做一些计算时使用计算属性和调用methods方法都可以达到相同的效果,那么这两种使用方式的区别在哪里: <div id="example"> <p& ...
随机推荐
- Qt UI tips
窗口居中: adjustSize(); move((availableGeometry.width() - width()) / 2, (availableGeometry.height() - h ...
- windows搭建redis集群最佳实践
一.redis的下载安装: (1)下载Redis-x64-3.2.100地址:https://github.com/MicrosoftArchive/redis/releases (2)安装后文件如下 ...
- ASP.NET 文件上传的实现(Upload)
1.最近应项目开发的需求要实现附件的异步上传和下载. 2.上传:文件上传到指定的路径下,并返回上传文件的信息给前端界面,如:文件的图标.上传的文件名.文件的大小. 3.上传后,在前端界面上显示上传的文 ...
- js 表格操作(兼容模式
用insertRow,insertRow操作表格时,发现在谷歌浏览器中顺序和IE是反的 // 表格新增行 function addTableRow($id,$arr,$rowAttr){ var ta ...
- python操作samba
最近在部署完xxl-job后,陆续将一些日常性执行的python脚本迁移到上面去:其中部分脚本涉及到对samaba的操作,先后尝试了pysmb.fs.smbfs.pysmbclient pysmb 安 ...
- 7. Reverse Integer Add to List★
题目内容: Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 题目分 ...
- egret 简单的四方向的a星寻路,在wing中可以直接跑
/** * main类中加载场景 * 创建游戏场景 * Create a game scene */ private createGameScene() { MtwGame.Instance.init ...
- ALV屏幕捕捉回车及下拉框事件&ALV弹出框回车及下拉框事件
示例展示: 屏幕依据输入的物料编码或下拉框物料编码拍回车自动带出物料描述: 点击弹出框,输入物料编码拍回车带出物料描述,点击确认,更新ALV: 1.创建屏幕9000,用于处理ALV弹出框: 2.针对屏 ...
- FZU-Problem 2294 Uint47 calculator
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2294 题意:按照所给负号进行赋值.加.减乘.除和取余的操作. 解题思路:用map来存储字符串与值之间的对应关系 ...
- 提升算法——Adaboost
思路:通过改变训练样本权重,学习多个分类器,并将这些分类器进行线性组合,提高分类器性能.大多数提升方法都是改变训练数据的概率分布(数据的权值) 强可学习:存在一个多项式的学习算法能够学习他,并且正确率 ...