此章节与响应式原理有很大的关系
除了未被声明过和未被渲染的数据外,还有什么数据更改后不会渲染页面?
<section id="app">
<!-- 即使向数组中添加了第4项,数组仍然显示3项 -->
{{ arr }}
{{ obj }}
</section>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'asdf',
arr:[1,2,3],
obj:{
name:'zxt',
age:'180',
sex:'nan',
}
}
})
vm.arr[3]=100; // 不是响应式的
</script>
修改数组的长度
<section id="app">
<!-- 更改了数组长度后,数组仍然显示1项 -->
{{ arr }}
{{ obj }}
</section>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'asdf',
arr:[1,2,3],
obj:{
name:'zxt',
age:'180',
sex:'nan',
}
}
})
vm.arr.length = 0; // 不是响应式的
</script>
添加或删除对象
<section id="app">
{{ arr }}
{{ obj }}
</section>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'asdf',
arr:[1,2,3],
obj:{
name:'zxt',
age:'180',
sex:'nan',
}
}
})
vm.obj.wakaka= 'hahaha'; // 不是响应式的
delete vm.obj.name; // 不是响应式的
</script>
数组与对象怎吗响应式更新
更改数组:
- 利用数组变异方法:push、pop、shift、unshift、splice、sort、reverse
- 利用vm.$set/Vue.set实例方法
- 利用vm.$set或Vue.set删除数组中的某一项
vm.$set是Vue.set的别名,使用方法:Vue.set(object, propertyName, value),也就是这个意思:Vue.set(要改谁,改它的什么,改成啥)
vm.$delete是Vue.delete的别名使用方法:Vue.delete(object, target),也就是这个意思:Vue.delete(要删除谁的值,删除哪个)
更改数组用变异方法,就够了
更改对象就用vm.$set和vm.$delete
vm.$set()
<section id="app">
{{ arr }}
{{ obj }}
</section>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'asdf',
arr:[1,2,3],
obj:{
name:'zxt',
age:'180',
sex:'nan',
}
}
})
vm.$set(vm.obj,name,'zzz');
</script>
vm.$delete
<section id="app">
{{ arr }}
{{ obj }}
</section>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'asdf',
arr:[1,2,3],
obj:{
name:'zxt',
age:'180',
sex:'nan',
}
}
})
vm.$set(vm.obj,'name','zzz');
</script>