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>
Vue.js-----轻量高效的MVVM框架(五、计算属性)的更多相关文章
- Vue.js-----轻量高效的MVVM框架(一、初识Vue.js)
1.什么是Vue.js? 众所周知,最近几年前端发展非常的迅猛,除各种框架如:backbone.angular.reactjs外,还有模块化开发思想的实现库:sea.js .require.js .w ...
- Vue.js-----轻量高效的MVVM框架(二、Vue.js的简单入门)
1.hello vue.js! (1)引入vue.js <script type="text/javascript" src="js/vue.js"> ...
- Vue.js-----轻量高效的MVVM框架(九、组件利用Props传递数据)
#使用props传递数据 html:传递普通的字符串 <h3>#使用props传递数据</h3> <div id="dr01"> <div ...
- Vue.js-----轻量高效的MVVM框架(七、表单控件绑定)
话不多说,先上完整代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- Vue.js-----轻量高效的MVVM框架(十二、组件动态切换)
在写html的过程中,我们经常会遇到要写tabs的切换,类似于这样: 在vue中,我们也有自己的组件和属性来实现这样的效果,这个东西我们叫做动态组件. html: <h3>动态组件< ...
- Vue.js-----轻量高效的MVVM框架(八、使用组件)
什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有 ...
- Vue.js-----轻量高效的MVVM框架(六、Class与Style绑定)
这个相对来说简单,看一遍代码就懂. 一.完整片段: <!DOCTYPE html> <html> <head> <meta charset="UTF ...
- Vue.js-----轻量高效的MVVM框架(四、指令)
Vue指令 指令 (Directives) 是特殊的带有前缀 v- 的特性.指令的值限定为绑定表达式,因此上面提到的 JavaScript 表达式及过滤器规则在这里也适用.指令的职责就是当其表达式的值 ...
- Vue.js-----轻量高效的MVVM框架(三、认识数据绑定)
插值 1.文本插值 (1)双向数据绑定 v-model="msg0101",一旦v-model中的数值发生变化,所有用vue表达式{{msg0101}}的数据都会更新. (2)单次 ...
随机推荐
- String的字符串相加是怎么实现的?
http://bbs.csdn.net/topics/60485130 首先看 String str = "a" + "b" + "c"; ...
- 前端总结·基础篇·JS(一)原型、原型链、构造函数和字符串(String)
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...
- Makefile的使用
Makefile 使用 一.实验说明 课程说明 在先前的课程中,我们已经学习了 gcc 和 gdb 的使用.本节课程中,我们将介绍 Makefile 的使用.Makefile带来的好处就是--&quo ...
- 选择设置好ext3日志模式
Linux是一种开放的.因Internet而产生的操作系统.Internet的发展.以网络为中心的计算模式如电子商务被迅速接受和普及,都为 Linux提供了更巨大的机会,使之成为企业和部门级的首选平台 ...
- 解决ScrollView嵌套viewpager滑动事件冲突问题
重写ScrollView 第一种方案能解决viewpager的滑动问题,但是scrollView有时会滑不动 public class VerticalScrollView extends Scrol ...
- [转]关于截取字符串substr和substring两者的区别
subString(start,stop) substr(start,length) substr和substring两个都是截取字符串的. 两者有相同点,如果只是写一个参数,两者的作用都是一样的:就 ...
- AttributeError: ‘module’ object has no attribute ‘ximgproc’(OpenCV)
问题描述: 使用opecv实现选择性搜索(selective search)的时候,执行如下代码时报了上述标题的错误. “ss = cv2.ximgproc.segmentation.createSe ...
- iOS 12中无法获取WiFi的SSID了?
1.现象描述 2018年苹果升级iOS12之后,没有办法获取wifi名称等信息. 2.获取wifi信息 2.1 获取代码 /************ 控制器的view 加载完毕 的时候调用 ***** ...
- Educational Codeforces Round 61 (Rated for Div. 2)D(二分,模拟,思维)
#include<bits/stdc++.h>using namespace std;typedef long long ll;int n,k;ll a[200007],b[200007] ...
- P3613 睡觉困难综合征 LCT+贪心+位运算
\(\color{#0066ff}{ 题目描述 }\) 由乃这个问题越想越迷糊,已经达到了废寝忘食的地步.结果她发现--晚上睡不着了!只能把自己的一个神经元(我们可以抽象成一个树形结构)拿出来,交给D ...