<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>