watch是vue中提供的一个方法,用来观察数据变更,进行数据监听的一种方式。也能够这样说 watch是一个对象,能够看做对象使用,是对象就有键,有值。vue
键:是须要监听的目标,能够是data中的某个变量。java
值能够是函数:就是当你监听的变量发生变化时,须要执行的函数,这个函数有两个形参,第一个是当前值,第二个是更新后的值。数组
值能够是函数名:不过这个函数名要使用单引号来标注。app
值能够是选项中的对象:选项包括有三个。函数
<div class="app">
<div> <p>watch方法使用</p> <input v-model="data"/> </div> </div>
<script>
var vm = new Vue({
el: '.app',
data: {
data: '111',
obj: {
arr: [
{value: ''}
],
data: ''
}
},
watch: {
data(newVal, oldVal) {
console.log(newVal, oldVal)
}
},
});
</script>
复制代码
结果如图所示:ui
<script>
var vm = new Vue({
el: '.app',
data: {
data: '111',
obj: {
arr: [
{value: ''}
],
data: ''
}
},
watch: {
data(newVal, oldVal) {
console.log(newVal, oldVal)
},
'obj': {
deep: true,
handler (newVal, oldVal) {
console.log(newVal)
}
}
},
methods: {
addInput () {
this.obj.arr.push({value: '111'})
}
}
});
复制代码
结果以下: this
在最近的项目中,我遇到了这样一个问题,在用watch监听对象的时候,对象里面数组的变更没法实时渲染到页面中,也由于这个问题卡了好久~~~最后,经过set方法解决了这样的问题,下面我来总结一下本身对set方法的理解。spa
因为javaScript的限制,vue不能检测如下变更的数组code
为了解决以上的问题,set方法就能发挥它的做用了~cdn
vue.set(target,key,value)
参数设置:
返回值:
用法:
设置对象的属性,同时触发视图更新。这个方法主要是用于为了避开vue不能检测属性被添加的限制。
<div class="app">
<div>
<p>set方法使用</p>
<ul>
<li v-for="(item, index) in arr">{{item}}</li>
</ul>
</div>
</div>
<script>
var vm = new Vue({
el: '.app',
data: {
arr: ['aaa', 'bbb', 'ccc']
}
});
vm.arr[1] = 'ddd'
console.log(vm.arr) // ['aaa','ddd','ccc']
复制代码
运行结果:
(界面显示)
<script>
var vm = new Vue({
el: '.app',
data: {
arr: ['aaa', 'bbb', 'ccc']
}
});
Vue.set(vm.arr, 1, 'ddd')
console.log(vm.arr) // ['aaa','ddd','ccc']
复制代码
运行结果:
(界面显示)