<body> <script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script> <div id='myApp'> <button @click="btnClick">{{name}}</button> </div> <script> new Vue({ el: '#myApp', data: { name: "张三", count: 0, zhangsan: {age: 20}, array: [1,2,3] }, computed: { count1(){ return this.count + 1 + this.name + this.zhangsan.age } }, methods: { btnClick(){ this.name='李四'; this.count++; this.zhangsan.age++; this.zhangsan.sex = '男'; // this.array.push(4); this.array[2] = "a" } }, // watch 是数据监视器, 它可以监视data中字段和计算属性的更新 watch:{ // 函数名就是监视的字段名, 参数分别是更新之后和之前的值 name(newValue, oldValue){ console.log('name', oldValue, newValue) }, // 监视计算属性 count1(a,b){ console.log('count1', a, b) }, // 监听对象, 对象中属性字段的增删改都监听不到 zhangsan(a,b){ console.log('zhangsan',a,b ) }, // 监听数组, 数组长度变化可监听到,数组长度不变时监听不到 array(a,b){ // 数组监听参数, 都是数组的新值 console.log("array", a,b) }, // 如何监听对象的更新? // 1, 针对性的监听对象中有一个字段的更新 'zhangsan.age'(a,b){ console.log("zhangsan.age", a,b) }, // 2, 深度监听, 一般用于监听对象中数据的变化 zhangsan: { handler(newValue){ console.log('zhangsan',newValue) }, deep: true // 开启深度监听 }, //数组通过索引修改数据,长度不变, 即不会重新渲染,也无法深度监听 array: { handler(newValue){ console.log("array", newValue) }, deep: true } } }) </script></body>