Vue.js-----轻量高效的MVVM框架(五、计算属性)
#基础例子
<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框架(五、计算属性)相关推荐
- Vue.js学习系列(二十八)-- 计算属性(二)
2019独角兽企业重金招聘Python工程师标准>>> 2. computed 与 methods区别 我们可以使用 methods 来替代 computed,效果上两个都是一样的, ...
- 31款轻量高效的开源 JavaScript 插件和库
31款轻量高效的开源 JavaScript 插件和库 目前有很多网站设计师和开发者喜欢使用由[url=http://www.kubiji.cn/forum-id261.html]JavaScript[ ...
- DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!
DataRabbit 3.0重写了DataRabbit 2.0的ORM实现的内核,性能提升了90倍左右,结果是DataRabbit 3.0的ORM性能与直接使用ADO.NET的性能已经非常接近. ...
- 轻量高效!清华智能计算实验室开源基于PyTorch的视频 (图片) 去模糊框架SimDeblur
作者丨科技猛兽 编辑丨极市平台 清华大学自动化系智能计算实验室团队开源基于 PyTorch 的视频 (图片) 去模糊框架 SimDeblur. 基于 PyTorch 的视频 (图片) 去模糊框架 Si ...
- # 代码约架?Vue.js和Binding.scala两大框架作者的PK
作为一个知乎小透明,最近看了一场炸鱼大片.两天前,民工叔因为 Teambition 是 React 技术栈而离职 一文,引发了激烈的讨论.其中民工叔偏向的技术选型Vue.js的作者出没现场黑了一把An ...
- .NET Core + JWT令牌认证 + Vue.js 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!...
DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯, ...
- 开源干货!.NET Core + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源
DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯, ...
- python通用权限管理框架图_开源干货!.NET Core + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源...
DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯, ...
- 开源干货!.NET Core + JWT令牌认证 + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源
DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"–.Net Core 的缩写: "Zeus"–中文译为宙斯,是古 ...
- Angular、React、Vue.js 等 6 大主流 Web 框架都有什么优缺点?
来自:开源中国 协作翻译 链接:oschina.net/translate/web-frameworks-conclusions 原文:sitepen.com/blog/2017/11/10/web- ...
最新文章
- 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_t
- 妈妈帮携手神策数据 数据赋能打造母婴智能陪伴者
- 中石油训练赛 - DNA(字符串哈希)
- Python对数列进行全排列
- [高中作文赏析]相约
- mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)...
- Java Stream:第2部分,计数始终是计数吗?
- Zookeeper概述、特点、数据模型
- java拖动图片拼图_求教,我的这个拼图程序中的移动图片的改怎么做
- 【华为云技术分享】云图说 | 华为云智能边缘平台IEF:智能边缘 让AI触手可及
- 柔性太阳能电池pdf_电子科大刘明侦教授团队钙钛矿太阳能电池研究取得重要进展...
- led透明屏生产厂家_LED透明屏厂家哪家好?2020年中国深圳LED透明屏品牌排行榜...
- 阿里巴巴全资收购中国网络配送平台饿了么
- 16.Linux网络编程
- 计算机硬盘小影响,系统C盘容量太小有哪些危害?又要如何扩容呢?今天再说一遍!...
- 超简单Python实现微信机器人自动回复
- 最大公约数,最小公倍数的求法
- 利用Matlab实现单像空间后方交会
- Android 6.0 双向通话自动录音
- 操作系统课设详细解答