动态v-model

  • Post author:
  • Post category:其他




引题: vue如何绑定动态的v-model

每日励志话语: 每天进一步一点点,这不就是希望。

image-20210407131136617

如果错误还望指出,大家一起加油,明天你就是最耀眼的一个。

如果内容对你有帮助还望可以帮我点个

三连

img



如题

笔者在工作上遇到这样一个场景在一些的表单中如果出现很多字段,那么使用循环的方式去处理会比较简洁,那么在这一过程中就出现了一个问题

如何动态绑定表单的值

,这里以

Element UI的form表单为例

假设目前需要:

10个输入框的表单

image-20210930172756011

如果一个去写代码后续改起来可能相当麻烦

    <el-form ref="form" :model="form" label-width="80px">
      <el-form-item label="活动名称">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称1">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称2">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称3">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称4">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称5">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称6">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称7">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称8">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="活动名称9">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSubmit">立即创建</el-button>
        <el-button>取消</el-button>
      </el-form-item>
    </el-form>

就需要这么一大串,如果我们通过把

输入框抽象成数组

就会这么干

首先元素肯定是循环没跑

image-20210930173348632

这时候就导致我们对

输入框的修改都在这个数组里

inputColumns: [
        {
          label: '活动名称',
          prop: 'name'
        },
        {
          label: '活动名称1',
          prop: 'name1'
        },
        {
          label: '活动名称2',
          prop: 'name2'
        },
        {
          label: '活动名称3',
          prop: 'name3'
        },
        {
          label: '活动名称4',
          prop: 'name4'
        },
        {
          label: '活动名称5',
          prop: 'name5'
        },
        {
          label: '活动名称6',
          prop: 'name6'
        },
        {
          label: '活动名称7',
          prop: 'name7'
        },
        {
          label: '活动名称8',
          prop: 'name8'
        },
        {
          label: '活动名称9',
          prop: 'name9'
        }
      ]

这里肯会有人说这不也是要写一大串吗?

这样有什么屁用?

src=http___pic1.zhimg.com_50_v2-40203f0666c1c55bbda81b0a862db996_hd.jpg&refer=http___pic1.zhimg

先别急嘛!!既然会有这样的需求就会有

应用场景

让我们看一下v-model的代码

 <el-input v-model="item.prop"></el-input> 

第一个

props

值为

name

那么这里等于

v-model="name"

但是这样绑定

v-model

就会出现一个问题

image-20210930174403343

在代码中我们

v-model的值是动态的

,即此时我们希望绑定的应该

v-model='name'

,绑定这个字段,但是目前的结果是绑定了

prop

这个字段

问题来了,如何绑定到我们想要的字段上

首先分析一下目前我们得到的结果是

循环后的结果如下

v-model="prop"

我们希望的是

v-model="[prop]"

这里[]指的是我们想要拿到prop的值

此时我就会想到

es6

的语法通过

[]

来获取值,那我们来试一下

<el-form-item v-for="(item, index) in inputColumns" :label="inputColumns[index].label" :key="index" >
     <el-input v-model="item[item.prop]"></el-input>
</el-form-item>

image-20211001092803013

可以看出此时我们已经成功绑定了,但是我们目前v-model的值为

item[item.prop]

此时绑定的是item上,以

elementUi

为例,elementUi是需要绑定

某个对象下

例如

    <el-select v-model="form.region" placeholder="请选择活动区域">
      <el-option label="区域一" value="shanghai"></el-option>
      <el-option label="区域二" value="beijing"></el-option>
    </el-select>

那我们只需要把

item[item.prop]

这里的item换成

form[item.prop]

此时就大功告成

image-20211001093146032



应用场景



1.假设目前有个表单:

输入的值要根据后端返回的字段决定时,这种方法就很有用

2.表单控件的复用:

如果有两个表单都是input只是label和绑定的值不一样那么用这种方法也可以更加简洁代码

此时就大功告成

[外链图片转存中…(img-kvutSLWi-1633572731451)]



应用场景



1.假设目前有个表单:

输入的值要根据后端返回的字段决定时,这种方法就很有用

2.表单控件的复用:

如果有两个表单都是input只是label和绑定的值不一样那么用这种方法也可以更加简洁代码



版权声明:本文为lin1072368472原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。