vue 中 v-model 动态属性名绑定值的问题

2023-07-26 08:46:47 +08:00
 17lian

大家的留言都看了,也是解答了我的一些疑问的 现在有这样一个问题,直接看代码吧

<el-switch v-model="form['delivery']['value']" />
data() {
    return {
      form: {
        delivery: {
          value: false
        }
      }
    }
  }
  methods: {
    onSubmit() {
      console.log(this.form)
    }
  }

打印结果是有层级的对象:

{ delivery: {value: true}}

假如我从前面一个组件传过来一个属性名 'delivery.value', 我怎么把这个'delivery.value' 转换成 form['delivery']['value']

属性名的层级不是固定的,要实现属性双向绑定,保持层级关系

大家有什么好的办法么

988 次点击
所在节点    问与答
3 条回复
vueli
2023-07-26 08:58:17 +08:00
封装一个组件,这个组件传的 v-model 值是最外层的 form ,然后再添加一个值,structure='delivery.value' .
LavaC
2023-07-26 09:37:05 +08:00
前阵子遇到过这个问题,我参考了 element form 的方法
```javascript
v-model="o[k]"
```
```javascript
export function getPropByPath (obj, path, strict) {
let tempObj = obj
path = path.replace(/\[(\w+)\]/g, '.$1')
path = path.replace(/^\./, '')
let keyArr = path.split('.')
let i = 0
for (let len = keyArr.length; i < len - 1; ++i) {
if (!tempObj && !strict) break
let key = keyArr[i]
if (key in tempObj) {
tempObj = tempObj[key]
} else {
if (strict) {
throw new Error('xxxxxx')
}
break
}
}
return {
o: tempObj,
k: keyArr[i],
v: tempObj ? tempObj[keyArr[i]] : null
}
};
```
LavaC
2023-07-26 09:39:01 +08:00
@LavaC 简单来说就是分割你那团字符串"xxx.xxx.xxx",从最初的对象获取到最终绑定值的上一级,再用这个上一级完成一次 v-model

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/959743

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX