计算属性和侦听器
1,计算属性
① 在 computed 属性对象中定义计算属性的方法
② 在页面中使用 {{ 方法名 }} 来显示计算的结果

③ 通过 getter / setter 实现对属性数据的显示和监视
④ 计算属性存在缓存,多次读取只执行一次 getter 计算
通过在表达式中调用方法也可以达到同样的效果


但是,不同的是计算属性是基于它们的响应式依赖进行缓存的,只在相关响应式依赖发生改变时它们才会重新求值,只要 msg 没有发生改变,多次访问 reverse_msg 计算属性会立即返回之前的计算结果,而不必再次执行函数,相比之下,每次触发重新渲染时,调用方法将总会再次执行函数。
2,侦听属性
① 通过 vm 对象的 $watch() 或 watch 配置来监视指定的属性
② 当属性变化时,回调函数自动调用,在函数内部进行计算
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
姓:<input type="text" placeholder="First Name" v-model="lastName" /><br>
名:<input type="text" placeholder="Last Name" v-model="firstName"><br>
姓名1(监听姓):<input type="text" placeholder="Full Name" v-model="fullName1"><br>
姓名2(监听名):<input type="text" placeholder="Full Name" v-model="fullName2"><br>
姓名3(监听姓和名):<input type="text" placeholder="Full Name" v-model="fullName3">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm=new Vue({
el:'#app',
data:{
firstName:'',
lastName:'',
fullName1:'',
fullName2:'',
},
watch:{
lastName: function (new_lastName) {
this.fullName1 = this.firstName + ' ' + new_lastName
},
firstName:function(new_firstName){
this.fullName2 = new_firstName + ' ' + this.lastName
},
},
computed:{
fullName3: {
get: function () {
return this.firstName + ' ' + this.lastName
},
set: function (value) {
let fullName3 = value.split(' ');
this.firstName = fullName3[0];
this.lastName = fullName3[1];
}
}
}
})
</script>
</body>
</html>


浙公网安备 33010602011771号