vue3: v-model如何传递多层嵌套属性?

作者站长头像
站长
· 阅读数 23

vue3: v-model如何传递多层嵌套属性?

vue3: v-model如何传递多层嵌套属性?

预期:formConfigVal.formData.tableattachments.innerRequireAttach当成了一个属性实际:tableattachments.innerRequireAttach当成了一个属性

vue3: v-model如何传递多层嵌套属性?

回复
1个回答
avatar
test
2024-06-23

首先这个问题跟 Vue 无关,而是基础的 JS 语法问题。

const a = {
  b: {
    c: {
      d: 'foo'
    }
  }
}

const key = 'c.d';
const val = a.b[key];
console.log(val);

问:上面的代码会输出什么?

如果你能明白为什么,那么这个问题也就很好理解了。

如果你真的想要这种深层路径的属性取值/赋值,你可以利用 lodash 库提供的 _.get()_.set() 这两个方法。

其次这里用 v-model 就不合适了(虽然其实也能实现,但写法会比较 ugly),但 v-model 本来就是一个语法糖,它实质会被解析成 v-bind + v-on:update,那么你直接写成 v-bind + v-on:update 就好了。

<!-- 伪代码 -->
<Component :foo="_.get(data, path)" @update:foo="(e) => _.set(data, path, e)" />
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容