先上源码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="example">
<input type="text" v-model="msg1">
<input type="text" v-model="msg2">
<p>Computed reversed msg1: "{{ reverseMsg1 }}"</p>
</div>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: '#example',
data: {
msg1: '我是绑定了msg1',
msg2: '我是绑定了msg2'
},
computed: {
// 计算属性的 getter
reverseMsg1: function () {
// `this` 指向 vm 实例
console.log("compute")
return this.msg1.split('').reverse().join('')
}
}
})
</script>
</body>
</html>
效果图:
修改第一个文本框
computed中的reverseMsg1函数被调用
现在修改msg2
修改msg2就不会触发reverseMsg1函数
震惊!!!
为什么?
reverseMsg1又没有显式地取监听msg1, 只是reverseMsg1函数中有这个的引用而已。这个是如何做到的?