Javascript v-model如何使对象的属性具有反应性?
链接到我的项目: 在我上面的链接中,“组件”文件夹中有一个名为HelloWorld.vue的文件:Javascript v-model如何使对象的属性具有反应性?,javascript,vue.js,v-model,Javascript,Vue.js,V Model,链接到我的项目: 在我上面的链接中,“组件”文件夹中有一个名为HelloWorld.vue的文件: inputvalue.bbbb是在数据选项中定义的被动数据,但 奇怪的是,inputvalue.cccc在使用v型输入后会变为反应型,但inputvalue.cccc不会与@input反应 在这个问题()中,不可能出现第一种情况。使用v-model将自动使用$set设置嵌套属性上的值。这确保了它可以与数组索引一起工作,也可以与不存在的对象属性一起工作,如您的示例所示 如果您不熟悉$set,请参见
inputvalue.bbbb
是在数据选项中定义的被动数据,但
奇怪的是,inputvalue.cccc
在使用v型输入后会变为反应型,但inputvalue.cccc
不会与@input
反应
在这个问题()中,不可能出现第一种情况。使用
v-model
将自动使用$set
设置嵌套属性上的值。这确保了它可以与数组索引一起工作,也可以与不存在的对象属性一起工作,如您的示例所示
如果您不熟悉$set
,请参见以下文档:
Vue中v-model
这部分的代码如下:
在您的示例中,有两个输入使用cccc
。正如您所注意到的,如果您编辑使用v-model
的输入,则一切正常。但是,如果先使用:value
/@input
输入,则即使随后使用v-model
输入,它也不起作用。奇怪的是,行为是由您首先编辑的两个输入中的哪一个决定的
原因可以在$set
的代码中看到:
问题在于,
$set
只会在属性不存在的情况下添加被动属性。因此,如果您首先使用:value
/@input
input,它将创建一个非反应性cccc
属性,一旦创建,它就不能成为反应性属性,即使您使用$set
。必须使用delete
删除它,然后才能反应性地重新添加它。请正确解释您的问题。但是……如何拦截$set调用?