简洁地链接 v-model?

Chain v-model succintly?

让下面的代码成为 Child,它嵌入在它的 Parent 中,并且有一个 NestedChild,它最终具有 <input><textarea>

现在,下面的代码将不起作用。父级重新渲染并更新 value 属性,因此结果只是最后输入的字母。

// Child.vue
<script lang='coffee'>
  export default
    props: ['value']
    computed:
      edit:
        get: -> @value
        set: (e) -> @$emit 'input', e
    # ...
</script>

<template lang='pug'>
  div
    NestedChild( v-model='edit' )
    //- ...
</template>

文本需要存储在代理变量中。

...

data: -> proxy: ''
computed:
  edit:
    get: -> @proxy = @value
    set: (e) -> @$emit 'input', @proxy = e
...

这适用于 NestedChild -> Child,或 Child -> Parent,但不适用于 Nested -> Parent,其中 Parent 最后将其存储在 Vuex、磁盘等中。该值不会在 Parent 中更新。

使其工作的简单方法是将 propName prop 传递给 Child,然后通过 propName 直接更新 Vuex 中的相关数据,也就是根本不使用 v-model。但是那个

因此实际上只解决了 Child 的问题,而没有解决 Parent -> Child -> NestChild1 -> NestChild2 -> ... -> input

那么,如何简洁地链接 v-model 呢?谢谢。

因此,无需在单独的数据变量中代理该值。问题中的原始代码片段应该可以工作,并且会冒泡到 parent 和 parent 的 parent 等

这里又是代码,只是转换成了javascript和html,而不是coffeescript和pug;否则与问题中的相同。

<template>
  <div>
    <NestedChild v-model='edit'>
    <!-- ... -->
  </div>
</template>

<script>
export default {
  props: ['value'],
  computed: {
    edit: {
      get: function()  { this.value },
      set: function(e) { this.$emit('input', e) }
    }
  }
    // ...
};
</script>

(决定留下问题,也许对某人有用)