【发布时间】:2018-03-21 20:46:25
【问题描述】:
尝试使用 vue watch 方法,但即使使用deep:true,它似乎也不会触发某些对象。
在我的组件中,我收到一个数组作为要创建的字段的道具
以下表格。
我可以构建表单并将它们动态绑定到一个名为 crudModelCreate 的对象,一切正常(我在 vue 开发工具中看到,甚至提交表单都按计划工作)
但我在尝试观察该动态对象的变化时遇到了问题。
<md-input v-for="(field, rowIndex) in fields" :key="field.id" v-model="crudModelCreate[field.name]" maxlength="250"></md-input>
...
data() {
return {
state: 1, // This gets changed somewhere in the middle and changes fine
crudModelCreate: {},
}
},
...
watch: {
'state': {
handler: function(val, oldVal) {
this.$emit("changedState", this.state);
// this works fine
},
},
'crudModelCreate': {
handler: function(val, oldVal) {
console.log("beep1")
this.$emit("updatedCreate", this.crudModelCreate);
// This doesn't work
},
deep: true,
immediate: true
},
}
【问题讨论】:
-
您的对象的更改是如何执行的?
-
您可能必须使用
Vue.set来更新对象属性,尤其是在添加新属性时。 -
@SuiDream v-model 对对象进行更改。 @AndreiNemes 绝对正确。在 component.mounted 上,我调用了一个初始化函数,该函数将遍历字段并为
crudModelCreate变量设置默认值(取决于字段的类型),我通过将this.crudModelCreate[prop] = value;更改为this.$set(this.crudModelCreate, prop, value);来做到这一点使手表触发。 -
谢谢@AndreiNemes,
Vue.set是我的答案。
标签: javascript node.js vue.js vuejs2