vue监视数据的原理:
vue会监视data中所有层次的数据
如何监测对象中的数据:
通过setter实现监视,且要在new Vue时就传入要监测的数据
对象中后追加的属性,Vue默认不做响应式处理
如需给后添加的属性做响应式,请使用如下API:
Vue.set(target.propertyName/index,value)或vm.$set(target.propertyName/index,value)
3.如何监测数组中的数据:
通过包裹数组更新元素的方法实现,本质上就做了两件事:
1.调用原生对应的方法对数组进行更新
2.重新解析模板,进而更新页面
4.在Vue修改数组中的某个元素时一定要用如下方法:
1.使用如下API:push()、pop()、shift()、unshift()、splice()、sort()、reverse()(会改变原数组)
2.使用Vue.set()或vm.$set()
替换数组: filter()、concat()、slice()不会变更原始数组,而是返回一个新的数组,这种情况下可以使用新数组替换就数组
this.student.hobby=this.student.hobby.filter((h)=>{return h!=='xxx})
Vue.set()或vm.$set()不能给vm或者vm的根数据对象添加属性
<div>{{student.name}}-{{student.age}}</div>
<button @click="addSex">添加属性</button>
<div v-if="student.sex"> {{student.sex}}</div>
data() {
return {
student: {
age: 18,
name: '张三'
}
}
},
methods: {
addSex() {
//两种写法都可以给对象添加相应式的属性,不过添加的对象不可以是vue实例对象或其data根对象
// Vue.set(this.student, 'sex', '男')
this.$set(this.student, 'sex', '男')
}
},
