当前位置: 首页 > 知识库问答 >
问题:

vue2 - 关于v-model动态绑定多层级的属性名,如何能够动态实现赋值属性?

满元凯
2023-07-26

题目描述

关于v-model动态绑定多层级的属性名

题目来源及自己的思路

因为我想做一个自动生成表单的组件,然后绑定初始值时,希望通过对象的层级关系去绑定v-model,这样最后提交的数据,也将是带有层级的对象数据。

相关代码

<template>  <el-form ref="form" :model="form" label-width="80px">    <el-form-item label="即时配送">      <el-switch v-model="form.delivery.value" />    </el-form-item>    <el-form-item>      <el-button type="primary" @click="onSubmit">立即创建</el-button>      <el-button>取消</el-button>    </el-form-item>  </el-form></template><script>export default {  props: {    modelProps: {      type: String,      default: ''    }  },  data() {    return {      form: {        delivery: {          value: false        },        role: {          id: 1,          name: '测试'        }      }    }  },  methods: {    onSubmit() {      console.log(this.form)    }  }}</script>

你期待的结果是什么?实际看到的错误信息又是什么?

假如modelProps接收到一个值是字符串"role.id",那我希望v-model可以变成form.role.id,如果接收到一个值是字符串"role.name",希望v-model可以变成form.role.name 类似于这样的

补充: 然后提交的数据也要有对应的层级结构:

{ delivery: {value: true}}
{ role: {id: 1}}
{ role: {name: 'hello'}}

实际有点难实现这个需要,希望大家能够给我一些思路,或者其它的实现方式

共有1个答案

燕鸿文
2023-07-26
<template>  <el-form ref="form" :model="form" label-width="80px">    <el-form-item label="即时配送">      <el-switch v-model="modelValue" />    </el-form-item>    <el-form-item>      <el-button type="primary" @click="onSubmit">立即创建</el-button>      <el-button>取消</el-button>    </el-form-item>  </el-form></template><script>export default {  props: {    modelProps: {      type: String,      default: ''    }  },  data() {    return {      form: {        delivery: {          value: false        },        role: {          id: 1,          name: '测试'        }      }    }  },  computed: {    modelPropsArray() {      return this.modelProps.split('.');    },    modelValue: {      get() {        return this.modelPropsArray.reduce((obj, key) => obj[key], this.form);      },      set(value) {        let obj = this.form;        const keys = [...this.modelPropsArray];        while (keys.length > 1) {          const key = keys.shift();          obj = obj[key];        }        obj[keys[0]] = value;      }    }  },  methods: {    onSubmit() {      console.log(this.form)    }  }}</script>
 类似资料:
  • 示例代码如下: 我想通过key动态的绑定processInfo的属性,但是这样不生效,请问各位大佬有什么解决办法?

  • FXJXM的数量跟normal的数量是一样的。请问v-for渲染el-radio-group的时候,v-model怎么绑定

  • 问题内容: 我想序列化一个对象,以便根据字段的类型对字段之一进行不同的命名。例如: 在这里,我希望将字段序列化为类似的内容,而不是总是根据情况包含一个称为不同类型的字段。 使用Jackson怎么能达到这样的目的? 问题答案: 使用自定义。 然后,假设您要序列化以下两个对象: 第一个将打印: 第二个: 我使用了包装对象的名称,因为它仅用作花边固定器。如果要删除它,则必须为 整个 类编写一个自定义序列

  • 问题内容: 我想序列化一个对象,以便根据字段的类型对字段之一进行不同的命名。例如: 在这里,我希望将该字段序列化为类似的内容,而不是总是根据情况将字段称为包含不同类型的字段。 使用Jackson怎么能达到这样的目的? 问题答案: 使用自定义。 然后,假设您要序列化以下两个对象: 第一个将打印: 第二个: 我使用了包装对象的名称,因为它仅用作花边固定器。如果要删除它,则必须为 整个 类编写一个自定义

  • 我需要创建一个插件,提供一个交互式任务,调用方式如下: 在这里,参数应该是用于分析的项目中的配置的名称。 然而,这种分析需要从配置中计算一些数据,这可能很昂贵。因此,我想缓存这些数据,但是,很自然,在配置内容发生变化(例如用户添加了依赖项)的情况下,缓存会失效。理想情况下,我会利用内置的Gradle任务依赖机制,它将跟踪任务依赖关系,并允许不运行计算,除非其输入发生变化。 这是我想出的解决方案,但

  • 本文向大家介绍js中动态创建json,动态为json添加属性、属性值的实例,包括了js中动态创建json,动态为json添加属性、属性值的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 在js中,一个[]认为是数组;{}认为是Json对象; var json = {}; 定义一个Json对象; 为Json对象赋值: json[aa] = "xx"; eval 解析json报错 提示缺少“