#基础例子

<div id="dr01"><h4>#基础例子</h4><div>num01={{num01}}, num02={{num02}}<p>num01: vm定义的属性,num02:计算出来的属性</p></div>
</div>

var dr01 = new Vue({el: "#dr01",data: {num01: 10,},computed: {num02: function() {return this.num01 * 5;}}
})

在js中定义组件dr01,初始化数据num01:10,computed中定义了num02(一个返回值为num01*5的方法)。

在页面中,{{num01}}为我们定义{{num02}}为计算出来的结果:

    

#计算属性vue.$watch

<div id="dr02"><h4>#计算属性vue.$watch</h4><div><span>FirstName01: </span><input type="text" v-model="firstName01" /><br /><span>LastName01: </span><input type="text" v-model="lastName01" /><br /><span>FullName01: </span><input type="text" readonly="readonly" v-model="fullName01" disabled="disabled" /></div><br /><div><span>FirstName02: </span><input type="text" v-model="firstName02" /><br /><span>LastName02: </span><input type="text" v-model="lastName02" /><br /><span>FullName02: </span><input type="text" readonly="readonly" v-model="fullName02" disabled="disabled" /></div>
</div>

var dr02 = new Vue({el: "#dr02",data: {firstName01: "Dark",lastName01: "Ranger",fullName01: "Dark Ranger",firstName02: "Slight",lastName02: "Wind"},computed: {fullName02: function() {return this.firstName02 + " " + this.lastName02;}}
});
dr02.$watch("firstName01", function(val) {this.fullName01 = val + " " + this.lastName01;
});
dr02.$watch("lastName01", function(val) {this.fullName01 = this.firstName01 + " " + val;
});

双向数据绑定的时候我们经常会遇到这样的情况:数据3=数据1+数据2,我们单独更新数据1或者数据2以后,数据3需要实时更新。这里我们有两种解决方案,但是肯定推荐第二种计算属性,为什么,简单!!!

1、在data中定义firstName01: "Dark",lastName01: "Ranger",为了初始化数据的时候fullName01也一样,同样定义fullName01: "Dark Ranger"

为了实时更新数据fullName01,我们需要对firstName01和lastName01进行观察,即加上dr02.$watch语句。

2、在data中定义firstName02: "Slight",lastName02: "Wind",对fullName02我们采用计算属性的方式:把fullName02定义为一个返回值为firstName02+lastName02的方法,这样,当firstName02或者lastName02发生数据变更的时候,fullName02通过计算属性也会发生变化,进行实时更新。

  初始化数据

    

  firstname或者lastname数据更新后

    

#计算setter

上面的例子,我们考虑个问题,是的,当firstname或者lastname数据更新的时候,fullname数据也会更新;但是,当fullname数据发生变化的时候firstname和lastname并不会更新,因为在方式1中我们没有对fullname加入观察,如果加入观察,是可以更新,但是我们要更新10000条数据,也就要写对10000个数据进行观察的$watch方法,这里我们在方式2中对数据fullname加入get和set方法即可。

方式2的gettter和setter

<div id="dr03"><h4>#计算setter</h4><span>FirstName: </span><input type="text" v-model="firstName" /><br /><span>LastName: </span><input type="text" v-model="lastName" /><br /><span>FullName: </span><input type="text" v-model="fullName" />
</div>

var dr03 = new Vue({el: "#dr03",data: {firstName: "Zhang",lastName: "Yao"},computed: {fullName: {get: function() {return this.firstName + " " + this.lastName;},set: function(newValue) {var names = newValue.split(" ");this.firstName = names[0];this.lastName = names[1];}}}
})

初始化数据:

  

当firstname、lastname、fullname中的一个发生变化的时候,其他数据也会实时更新

  

完整代码 如下:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><script type="text/javascript" src="js/vue.js"></script><title>计算属性</title></head><body><div id="dr01"><h4>#基础例子</h4><div>num01={{num01}}, num02={{num02}}<p>num01: vm定义的属性,num02:计算出来的属性</p></div></div><div id="dr02"><h4>#计算属性vue.$watch</h4><div><span>FirstName01: </span><input type="text" v-model="firstName01" /><br /><span>LastName01: </span><input type="text" v-model="lastName01" /><br /><span>FullName01: </span><input type="text" readonly="readonly" v-model="fullName01" disabled="disabled" /></div><br /><div><span>FirstName02: </span><input type="text" v-model="firstName02" /><br /><span>LastName02: </span><input type="text" v-model="lastName02" /><br /><span>FullName02: </span><input type="text" readonly="readonly" v-model="fullName02" disabled="disabled" /></div></div><div id="dr03"><h4>#计算setter</h4><span>FirstName: </span><input type="text" v-model="firstName" /><br /><span>LastName: </span><input type="text" v-model="lastName" /><br /><span>FullName: </span><input type="text" v-model="fullName" /></div><script>var dr01 = new Vue({el: "#dr01",data: {num01: 10,},computed: {num02: function() {return this.num01 * 5;}}})var dr02 = new Vue({el: "#dr02",data: {firstName01: "Dark",lastName01: "Ranger",fullName01: "Dark Ranger",firstName02: "Slight",lastName02: "Wind"},computed: {fullName02: function() {return this.firstName02 + " " + this.lastName02;}}});dr02.$watch("firstName01", function(val) {this.fullName01 = val + " " + this.lastName01;});dr02.$watch("lastName01", function(val) {this.fullName01 = this.firstName01 + " " + val;});var dr03 = new Vue({el: "#dr03",data: {firstName: "Zhang",lastName: "Yao"},computed: {fullName: {get: function() {return this.firstName + " " + this.lastName;},set: function(newValue) {var names = newValue.split(" ");this.firstName = names[0];this.lastName = names[1];}}}})</script></body></html>

转载于:https://www.cnblogs.com/wrcold520/p/5512692.html

Vue.js-----轻量高效的MVVM框架(五、计算属性)相关推荐

  1. Vue.js学习系列(二十八)-- 计算属性(二)

    2019独角兽企业重金招聘Python工程师标准>>> 2. computed 与 methods区别 我们可以使用 methods 来替代 computed,效果上两个都是一样的, ...

  2. 31款轻量高效的开源 JavaScript 插件和库

    31款轻量高效的开源 JavaScript 插件和库 目前有很多网站设计师和开发者喜欢使用由[url=http://www.kubiji.cn/forum-id261.html]JavaScript[ ...

  3. DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!

       DataRabbit 3.0重写了DataRabbit 2.0的ORM实现的内核,性能提升了90倍左右,结果是DataRabbit 3.0的ORM性能与直接使用ADO.NET的性能已经非常接近. ...

  4. 轻量高效!清华智能计算实验室开源基于PyTorch的视频 (图片) 去模糊框架SimDeblur

    作者丨科技猛兽 编辑丨极市平台 清华大学自动化系智能计算实验室团队开源基于 PyTorch 的视频 (图片) 去模糊框架 SimDeblur. 基于 PyTorch 的视频 (图片) 去模糊框架 Si ...

  5. # 代码约架?Vue.js和Binding.scala两大框架作者的PK

    作为一个知乎小透明,最近看了一场炸鱼大片.两天前,民工叔因为 Teambition 是 React 技术栈而离职 一文,引发了激烈的讨论.其中民工叔偏向的技术选型Vue.js的作者出没现场黑了一把An ...

  6. .NET Core + JWT令牌认证 + Vue.js 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!...

    DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯, ...

  7. 开源干货!.NET Core + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源

    DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯, ...

  8. python通用权限管理框架图_开源干货!.NET Core + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源...

    DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯, ...

  9. 开源干货!.NET Core + JWT令牌认证 + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源

    DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"–.Net Core 的缩写: "Zeus"–中文译为宙斯,是古 ...

  10. Angular、React、Vue.js 等 6 大主流 Web 框架都有什么优缺点?

    来自:开源中国 协作翻译 链接:oschina.net/translate/web-frameworks-conclusions 原文:sitepen.com/blog/2017/11/10/web- ...

最新文章

  1. 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_t
  2. 妈妈帮携手神策数据 数据赋能打造母婴智能陪伴者
  3. 中石油训练赛 - DNA(字符串哈希)
  4. Python对数列进行全排列
  5. [高中作文赏析]相约
  6. mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)...
  7. Java Stream:第2部分,计数始终是计数吗?
  8. Zookeeper概述、特点、数据模型
  9. java拖动图片拼图_求教,我的这个拼图程序中的移动图片的改怎么做
  10. 【华为云技术分享】云图说 | 华为云智能边缘平台IEF:智能边缘 让AI触手可及
  11. 柔性太阳能电池pdf_电子科大刘明侦教授团队钙钛矿太阳能电池研究取得重要进展...
  12. led透明屏生产厂家_LED透明屏厂家哪家好?2020年中国深圳LED透明屏品牌排行榜...
  13. 阿里巴巴全资收购中国网络配送平台饿了么
  14. 16.Linux网络编程
  15. 计算机硬盘小影响,系统C盘容量太小有哪些危害?又要如何扩容呢?今天再说一遍!...
  16. 超简单Python实现微信机器人自动回复
  17. 最大公约数,最小公倍数的求法
  18. 利用Matlab实现单像空间后方交会
  19. Android 6.0 双向通话自动录音
  20. 操作系统课设详细解答

热门文章

  1. Jquery 动画
  2. OpenGL ES API with no current context
  3. 深圳市云瑶信息科技有限公司
  4. jQuery AJAX实现调用页面后台方法
  5. 《101 Windows Phone 7 Apps》读书笔记-TODO LIST
  6. 脚本故事 - 2003年11月
  7. $CH0201$ 费解的开关
  8. mysql 数据库的基本操作语法
  9. Python学习笔记(语句)
  10. 极品菜系列3 [图]