目前正在为 json 数组生成的表单构建组件集,其对象类似于下面。我需要观察父值对象以填充其他字段并将其连接到彼此。
{
id: 'title',
label: 'Title',
type: 'text',
placement: 'main',
placeholder: 'Write Something...'
},
{
id: 'slug',
label: 'Slug',
type: 'slug',
placement: 'seo',
populateFrom: 'title',
gridSize: 6
}
组件有一个层次结构,让父(或祖父)知道字段值作为表单模型。
FormView
Field
FieldText
Field
FieldSlug
由 FieldSlug 检查填充来自选定模型属性的数据的属性,在本例中为它的“标题”字段。
// this.field is field definition object sampled above
// $emit('input') notifies FormView to change value for form
if (this.field.populateFrom) {
this.populateFrom = this.$parent.$watch('value', (after, before) => {
this.$emit('input', slug(after[this.field.populateFrom]))
}, {deep: true})
}
对于编辑和创建表单,我使用相同的视图(组件)。从 Vuex 获取并由 getter 过滤的数据。当其创建模式时,getter 无法从状态中找到任何对象并返回空对象。
如果其为空对象,则 $parent.value 不能被观看。(没有触发)如果它从状态返回对象,它工作得很好。
afaik, $set 使对象自动反应;这就是我在“FormView”中用来设置数据的东西。数据成功设置,但 $watch 没有触发任何内容。
我错过了什么?