一、计算属性:computed
搭配get,set使用,实现对属性数据的显示和监视,计算属性存在缓存,多次读取只执行一次getter计算。
举个例子:
实现一个计算器
<body>
<div id="app">
<input type="text" v-model.number="firstNum">+<input type="text" v-model.number="lastNum"><br>
<input type="text" v-model="sum">
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
firstNum: null,
lastNum: null,
},
computed: {
sum: {
get() { // get中涉及的值发生改变,则sum值就改变
return this.firstNum + this.lastNum;
},
set(val) { // set监听属性值的改变
//如果sum值变了,firstNum和lastNum也改变成sum值的一半
var avg = val / 2;
this.firstNum = avg;
this.lastNum = avg;
console.log(val);
}
}
}
});
</script>
</body>
二、侦听器:watch
侦听器,观察data里的数据,数据一旦改变,执行对应的函数
查找过程 data > method > computed
两种书写方式
- data里对应的值在侦听器里写成函数的形式:
var vm = new Vue({
el: "#app",
data: {
name: 'zml',
age: 18
},
watch: { //侦听器,观察data里的数据,数据一旦改变,执行对应的函数
name (newVal) {
console.log('name');
this.person = `姓名:${this.name},年龄:${this.age}`;
},
age (newVal) {
console.log('age');
this.person = `姓名:${this.name},年龄:${this.age}`;
}
}
});
- data里对应的值在侦听器里写成对象的形式:
var vm = new Vue({
el: "#app",
data: {
name: 'zml',
age: 18
},
watch: { //侦听器,观察data里的数据,数据一旦改变,执行对应的函数
name: {
handler (newVal){
this.person = `姓名:${this.name},年龄:${this.age}`;
},
immediate: true // 用对象的方式写侦听器,可以添加immediate属性,
//设置为true,则第一子加载页面的时候也触发该侦听器
},
age: {
handler (newVal){
this.person = `姓名:${this.name},年龄:${this.age}`;
}
}
}
});