在VUE+ELEMENT开发中如何快速渲染表单

最近使用VUE+ELEMENT-UI开发项目是总结了如何在表单过多的情况下快速渲染表单的方法。

<el-form
            :rules="rules"
            :inline="true"
            :model="deviceForm"
            ref="deviceForm"
            label-width="100px"
            class="demo-ruleForm"
            status-icon
            :show-message="false"
          >

首先在需要渲染的,<el-form>标签里面绑定:model为一个对象里面是表单内部需要监控的数据。例如:

deviceForm: {
        dbDevicecode: null, // 设备编码
        dbDevicename: null, // 设备名称
        dbIp: null, // IP
        dbPort: null, // 端口
        dbLoginname: null, // 账号
        dbPassword: null, // 密码
        dbStatus: null, // 设备状态
        dbOnlinestatus: null, //在线状态
        dbAddress: null, // 设备地址
        dbMac: null, // 物理地址
        dbExtendcode: null, // 扩展编码
        dbRemark: null // 描述
      },

然后把表单中需要渲染的组件类型在data中用一个对象数组定义出来

addList: [
        {
          title: "选择厂商",
          info: "请选择厂商",
          type: "vender",
          name: "vender"
        },
        {
          title: "选择模板",
          info: "请选择模板",
          type: "template",
          name: "template"
        },
        {
          title: "设备编号",
          info: "请输入编号",
          type: "input",
          name: "dbDevicecode"
        }
        ....
      ],

再在<el-form-item>标签中使用v-for绑定addList,并且绑定label为item.title,

<el-form-item
              v-for="item in addList"
              :key="item.title"
              :label="item.title"
              :prop="item.name"
            >

这里使用props主要是配合之后对表单的验证,下一篇文章会讲到。
之后就到了最重要的一步了。

// 选择你要渲染的组件使用v-if等于上面addList里面定义的type,例如vender对应的是一个选择框,
<el-select
                v-if="item.type=='vender'"
                v-model.trim="venderOptions[item.name]"
                size="mini"
                @change="handleVenderChange"
              >
// 还有input框
<el-input size="mini" v-if="item.type=='input'" v-model.trim="deviceForm[item.name]"></el-input>
// 甚至多行文本框,只要你使用v-if配合属性里面的type就能够实现
<el-input
                v-else-if="item.type=='textarea'"
                style="margin-top:10px;"
                v-model.trim="deviceForm[item.name]"
                type="textarea"
                resize="none"
                :autosize="{ minRows: 3, maxRows: 4}"
                placeholder="请输入描述"
              ></el-input>

今天的文章就讲到这里了,如果有不懂得可以留言告诉我,第一次写文章,如有不好多多包涵!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。