※前提条件:本情報はVue 2.0を基づいて説明してる
一个对象、键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。
<body> <div id="app"> <input type="text" v-model="num"> </div> <script src="vue.js"></script> <script> new Vue({ el: '#app', data: { num: '' }, watch: { num(newVal, oldVal) { // 监听 num 属性的数据变化 // 作用 : 只要 num 的值发生变化,这个方法就会被调用 // 第一个参数 : 新值 // 第二个参数 : 旧值,之前的值 console.log('oldVal:',oldVal) console.log('newVal:',newVal) } } }) </script> </body>
<body> <div id="app"> <input type="button" value="更改名字" @click="change"> </div> <script src="vue.js"></script> <script> new Vue({ el: '#app', data: { food: { id: 1, name: '冰激凌' } }, methods: { change() { this.food.name = '棒棒糖' } }, watch: { // 第一种方式:监听整个对象,每个属性值的变化都会执行handler // 注意:属性值发生变化后,handler执行后获取的 newVal 值和 oldVal 值是一样的 food: { // 每个属性值发生变化就会调用这个函数 handler(newVal, oldVal) { console.log('oldVal:', oldVal) console.log('newVal:', newVal) }, // 立即处理 进入页面就触发 immediate: true, // 深度监听 属性的变化 deep: true }, // 第二种方式:监听对象的某个属性,被监听的属性值发生变化就会执行函数 // 函数执行后,获取的 newVal 值和 oldVal 值不一样 'food.name'(newVal, oldVal) { console.log('oldVal:', oldVal) // 冰激凌 console.log('newVal:', newVal) // 棒棒糖 } } }) </script> </body>
コメント: