因为vue2的响应式是通过Object.defineProperty()实现的,如果给data中对象动态添加属性,后面新增的属性能被添加进对象,但不会被设置成响应式数据,因为data中对象一开始会通过Object.defineProperty()实现响应式,但后面新增的属性不会被Object.defineProperty()设置成响应式数据。
    解决办法:通过vue.$set()去动态添加属性,该属性会被添加进响应式系统中

    在使用v-model时,一般会在data中初始化数据,但某些地方数据类似,我就想能不能不初始化数据,然后通过v-model动态绑定data对象中的属性,看能不能实现响应式的双向绑定

    1. <template v-for="value in formData">
    2. <div :key="value">{{ value }}</div>
    3. </template>
    4. <input v-model="formData['test']">
    5. data(){
    6. return {
    7. formData:{}
    8. }
    9. }

    发现这样写是可以实现动态添加属性且该属性是响应式的,那么这是如何实现响应式的呢?
    通过实践我发现它可能是这样子实现的

    1. <input :value="formData['test']" @input="e => $set(formData,'test',e.target.value)">