VUE对象的动态绑定


vue不检测对象的删除和添加

vue不能检测到对象的删除和添加,因为vue初始化实例的时候对属性进行一个get和set的过程,因此我们对象上的属性必须要在初始化的时候存在才可以进行动态的绑定的,以下的例子就是我们的没有添加对象的时候的动态绑定,例子是在iview Run上跑的地址是​​https://run.iviewui.com/aR1fG6zD​​:

<template>
<div v-for="(value, key) in language">
{{value}}
</div>
<Button @click="changeLanguage">
改变
</Button>
</template>
<script>
export default {
data () {
return {
language:{
zh:'中文',
en:'英文'
}
}
},
methods:{
changeLanguage(){
this.language.zh = "中国中文";
}
}
}
</script>

那么我们可以直接在上面点击运行我们会在右侧看到如下的效果:

VUE对象的动态绑定_对象动态绑定

接着我们点击改变按钮,我们会发现我们的页面的值会随着变化而变化。

VUE对象的动态绑定_动态绑定_02

动态添加对象属性

还是基于我们上面的例子,我们进行改造,动态添加我们相关的对象,以下的例子就是我们动态添加的属性的例子,我们会看到我们动态添加的属性是不会生效的iview Run的地址是​​https://run.iviewui.com/9T4BnYxs​​:

<template>
<div v-for="(value, key) in language">
{{value}}
</div>
<Button @click="changeLanguage">
改变
</Button>
<Button @click="addLanguageAttr">
增加属性
</Button>
</template>
<script>
export default {
data () {
return {
language:{
zh:'中文',
en:'英文'
}
}
},
methods:{
changeLanguage(){
this.language.zh = "中国中文";
},
addLanguageAttr(){
console.log('属性添加前的值:'+JSON.stringify(this.language))
this.language.tw = "中国繁体";
console.log('属性添加前的值:'+JSON.stringify(this.language))
}
}
}
</script>

VUE对象的动态绑定_对象动态绑定_03

动态添加对象属性的双向绑定的实现

那么我们如何添加我们自己定义的属性呢,实际上非常的简单直接使用下面的方式我们就可以快速的实现了:

this.$set(this.language, 'tw', '中国繁体')

实现的iview Run上的地址是:​​https://run.iviewui.com/bC1F0Qv2​​例子的代码:

<template>
<div v-for="(value, key) in language">
{{value}}
</div>
<Button @click="changeLanguage">
改变
</Button>
<Button @click="addLanguageAttr">
增加属性
</Button>
</template>
<script>
export default {
data () {
return {
language:{
zh:'中文',
en:'英文'
}
}
},
methods:{
changeLanguage(){
this.language.zh = "中国中文";
},
addLanguageAttr(){
console.log('属性添加前的值:'+JSON.stringify(this.language))
this.$set(this.language, 'tw', '中国繁体')
console.log('属性添加前的值:'+JSON.stringify(this.language))
}
}
}
</script>

VUE对象的动态绑定_json_04

到此处我们就完成了vue对象的动态绑定