侦听器用于监听数据变化并执行指定操作。
为了监听对象内部值的变化,需要将 watch 书写为对象,并设置
选项 deep: true,这时通过 handler 设置处理函数。
注意:当更改(非替换)数组或对象时,回调函数中的新值与旧
值相同,因为它们的引用都指向同一个数组 、对象。
• 注意:数组操作不要使用索引与length,无法触发侦听器函数。
<div id="app">
<input type="text" v-model="value">
</div>
<script src="lib/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
value: ''
},
watch: {
value () {
console.log('侦听器执行了');
}
}
})
<input type="text" v-model="value">
</div>
<script src="lib/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
value: ''
},
watch: {
value () {
console.log('侦听器执行了');
}
}
})
var vm = new Vue({
el: '#app',
data: {
title: '这是内容',
obj: {
content1: '内容1',
content2: '内容2'
},
arr: [1, 2, 3, 4, 5]
},
watch: {
title (val, oldVal) {
console.log('title 被修改了', val, oldVal);
},
/* obj () {
console.log('obj 被修改了');
} */
obj: {
deep: true,
handler (val, oldVal) {
console.log('obj 被修改了', val, oldVal);
console.log(val === oldVal);
}
},
arr (val, oldVal) {
console.log('arr 修改了', val, oldVal)
},
/* arr: {
deep: true,
handler (val, oldVal) {
console.log('arr 修改了', val, oldVal)
}
} */
}
});
el: '#app',
data: {
title: '这是内容',
obj: {
content1: '内容1',
content2: '内容2'
},
arr: [1, 2, 3, 4, 5]
},
watch: {
title (val, oldVal) {
console.log('title 被修改了', val, oldVal);
},
/* obj () {
console.log('obj 被修改了');
} */
obj: {
deep: true,
handler (val, oldVal) {
console.log('obj 被修改了', val, oldVal);
console.log(val === oldVal);
}
},
arr (val, oldVal) {
console.log('arr 修改了', val, oldVal)
},
/* arr: {
deep: true,
handler (val, oldVal) {
console.log('arr 修改了', val, oldVal)
}
} */
}
});