在Vue中,当我们给一个已经存在的对象添加新属性时,如果这个对象已经被Vue所响应式监测,那么这个新属性将不会自动触发界面的重新渲染,因为Vue无法检测到对象属性的添加或删除。这时需要通过Vue提供的Vue.set()或this.$set()方法来手动触发界面的重新渲染。
Vue.set()和this.$set()方法的用法相同,它们的第一个参数是要操作的对象,第二个参数是要添加的属性名,第三个参数是要添加的属性值。
下面是一个给对象添加新属性的示例代码:
<template>
<div>
<p>{{ message.name }}</p>
<button @click="changeName">Change Name</button>
</div>
</template>
<script>
export default {
data() {
return {
message: { age: 20 }
}
},
methods: {
changeName() {
// 直接添加属性,界面不会刷新
this.message.name = 'Tom'
// 使用Vue.set()方法添加属性,界面会刷新
Vue.set(this.message, 'name', 'Tom')
// 或者使用this.$set()方法
this.$set(this.message, 'name', 'Tom')
}
}
}
</script>
在这个示例中,我们在message对象中添加了一个新的name属性,并使用Vue.set()或this.$set()方法来触发界面的重新渲染,这样界面上的数据就会及时更新。