如果道具为空,则父母的道具不能被孩子观看

时间:2018-07-31 11:11:56

标签: vue.js vuex vue-reactivity

当前正在构建由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

populateFrom属性,由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获取数据并通过吸气剂过滤。在创建模式下,吸气剂无法从状态中找到任何对象并返回空对象。

如果为空对象,则$ parent.value不可观察。 (什么都没有触发)如果它从状态返回对象,那么它将运行得很好。

afaik, $ set使对象自动反应;多数民众赞成在“ FormView”内部设置数据。 数据设置成功,但没有由$ watch触发

我缺少什么?

1 个答案:

答案 0 :(得分:0)

  • 将$ data对象用作新对象
  • 使用$ set设置表单中的每个键

它解决了反应性问题。