打开vue工具 我们可以看到 我们手动给姓绑定一个C,我们的fullname1并没有发生变化, 没有拿到这个值
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 1. computed 计算属性-->
<div id="demo">
姓: <input type="text" placeholder="First Name" v-model="firstname"><br>
名: <input type="text" placeholder="Last Name" v-model="lastname"><br>
姓名1(单向): <input type="text" placeholder="Full Name1" v-model="fullname1"><br>
姓名2(单向): <input type="text" placeholder="Full Name2" v-model="fullname2"><br>
姓名3(双向): <input type="text" placeholder="Full Name3"><br>
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
const vm = new Vue ({
el: '#demo',
data: {
firstname: 'A',
lastname: 'B',
// fullname1: 'A B'
fullname2: 'A B'
},
computed: {
// 什么时候执行: 初始化显示 / 相关的data数据发生改变
fullname1 () { // 计算属性中的一个方法, 方法的返回值作为属性值
console.log('fullname1()')
return this.firstname + ' ' + this.lastname
}
},
watch: { // 配置
firstname: function (value) { // firstname 发生了变化
console.log(this) // 就是vm对象
this.fullname2 = value + ' ' + this.lastname
}
}
})
vm.$watch('lastname', function (value) {
// 更新 fullname2
this.fullname2 = this.firstname + ' ' + value
})
</script>
</body>
</html>
看上去computed比watch简单 一个完成了2个watch的任务
后面还有一种深度监视很有用
1.4.2 关于回调函数 get()和set()computed: {
// 什么时候执行: 初始化显示 / 相关的data数据发生改变
// 计算并返回当前属性的值
fullname1 () { // 计算属性中的一个方法, 方法的返回值作为属性值 // 这整个也是一个回调函数
console.log('fullname1()')
return this.firstname + ' ' + this.lastname
},
fullName3: {
// 1. 你定义的, 2. 你没有调用 3. 但最后他执行了
// 2. 什么时候调用? 2. 用来做什么?
// 回调函数 计算并返回当前属性的值 回调函数的三个特性: (上面)
get() {
return this.firstname + ' ' + this.lastname
},
set() {
}
}
},
如果我设置了3个p标签
{{fullName1}}
有一个问题 为什么我刷新页面的时候看见fullName1()这个函数只调用了一次却出现了三个相同的值呢?
答:说明这中间有一个缓存的过程
生成相当于 key-value (就是 fullName1: 'value')
每次内存先去key中寻找缓存的value值
getter : 属性的get方法
setter : 属性的set方法