computed属性

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://unpkg.com/vue"></script>
</head>
<body>
<div id="app-1">
<p>初始字符串:{{ content }}</p>
<p>计算后字符串:{{ reversedContent }}</p>
</div>
<script type="text/javascript">
var vm1 = new Vue({
el: '#app-1',
data: {
content: 'TanSea'
},
computed: {
reversedContent: function() {
return this.content.split('').reverse().join('')
}
}
})
</script>
</body>
</html>

Vue对象实例化时,之前接触过了el、data、methods,这里再介绍一个computed

computed的定义和methods的定义是一样的,但是在理解上可以理解为methods是类的方法,computed是类的属性

但是,computed默认是没有set方法的,我们可以显式的给他定义一个

<div id="app-2">
<p>初始字符串:{{ content }}</p>
<p>计算后字符串:{{ reversedContent }}</p>
</div>
<script type="text/javascript">
var vm2 = new Vue({
el: '#app-2',
data: {
content: 'TanSea'
},
computed: {
reversedContent: {
get: function() {
return this.content.split('').reverse().join('')
},
set: function(newValue) {
this.content = newValue
}
}
}
})
</script>

这时,我们就可以在浏览器的控制台输入vm2.reversedContent = 'Hello, World'给他重新赋值了

在大部分情况下,computed和methods是可以互换的,那么他们的区别是什么?

computed 属性会基于它所依赖的数据进行缓存,只有在依赖的数据发生变化时,才会重新取值

methods总是再次执行函数

<div id="app-3">
<p>初始字符串:{{ nowDate }}</p>
<p>methods:{{ mNowDate() }}</p>
<!-- Date.now()是非响应式的依赖数据,computed属性永远不会更新 -->
<p>computed:{{ cNowDate }}</p>
</div>
<script type="text/javascript">
var vm3 = new Vue({
el: '#app-3',
data: {
nowDate: Date.now()
},
methods: {
mNowDate: function() {
return Date.now()
}
},
computed: {
cNowDate: function() {
return Date.now()
}
}
})
</script>

例子使用了Date.now()这种非响应式数据,computed在首次计算完成之后就不再更新

最新文章

  1. PropertyMetadata和UIPropertyMetadata的一点区别
  2. OpenCV整体的模块架构
  3. oracle 前滚和回滚
  4. Yii2 数据操作Query Builder(转)
  5. SharpGL学习笔记(十五) 纹理映射
  6. R语言学习笔记:向量
  7. linux 用户、组,修改文件权限
  8. HDU2177:取(2堆)石子游戏(威佐夫博弈)
  9. basic mongodb
  10. 自定义的string类
  11. React Native 之 网络请求
  12. Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块
  13. Windos上生成密钥,以及添加到GIT
  14. initializer element is not constant 问题
  15. MapRedece(多表关联)
  16. Android-Android版美图秀秀
  17. mac 删除垃圾篓中的文件
  18. 12款优秀 jQuery Ajax 分页插件和教程
  19. linux I/O函数使用
  20. USG防火墙基础

热门文章

  1. 将Mac上的***代理共享给其他设备
  2. Web里URL空格的转换方法
  3. android自定义View_4——自定义属性的格式选择
  4. c/c++输入处理,制定变量参数和值
  5. Tesseract&ndash;OCR 库原理探索
  6. java编程:将数组的第一个为最大第二个为最小以此类推
  7. angularjs 发送ajax请求的问题
  8. laydate日历控件
  9. Java输入输出重定向代码
  10. Js中localStorage