精华内容
下载资源
问答
  • 表单组件定义

    千次阅读 2016-02-06 21:51:00
    界面左区域为表单组件树,显示所定义的表单组件类实例树,三种过滤形式: 组件类:过滤项文本输入框、下拉列表选择框、下拉日期选择框、下拉日期时间选择框等,选择后触发查询。 分类名:所有组件、未设置模块...
    
    
    

    基于新构思和JQuery控件而开发的平台,该功能模块用于定义表单组件的属性,表单组件包括文本输入框、下拉列表选择框、下拉日期选择框、下拉日期时间选择框等。界面左区域为表单组件树,显示所定义的表单组件类实例树,有三种过滤形式:

    组件类:过滤项有文本输入框、下拉列表选择框、下拉日期选择框、下拉日期时间选择框等,选择后触发查询。

    分类名:所有组件、未设置模块组件和所有定义的Mini模块,选择后触发查询。

    关键词:输入类实例名中包含的字或词,进行模糊查询,键入回车触发查询。

    界面右区域为表单组件的详细信息,当在组件类过滤框中选中一种表单组件时,界面右区域将显示所选表单组件的属性详细信息。界面样式如下:

    上面界面展示的是下拉列表选择框的属性信息,界面右面上部分是下拉列表选择框的基本属性,包括下拉数据所使用到的SQL,界面右面下部分是下拉数据SQL中的参数。下拉数据SQL写法如下:




    SELECT CodeTextValue,CodeKeyValue FROM V_Code whereCodeTypeID='0000000139' order by cast(CodeKeyValue as int)



    下拉数据SQL中至少要有两个字段:值字段和文本显示字段,如果需要拼音字段还要加上拼音字段,各字段的名称要填写到相应的属性中去。如果SQL中有参数,在下部分的参数定义中要定义参数。下拉数据SQL参数属性介绍如下:


    • 参数物理名:参数名必须为:@+原字段物理名+_。是必填项。对于SQLServer的参数前面加‘@’最后加‘_’,对于Oracle数据库前面加‘:’最后加‘_’。


     


    • 参数类型:字符或字符串类型;DATE:日期型;NUMERIC:数字型,包括各种浮点小数;INT:各种整数;BOOL:布尔型。

    • 参数的替换字符串:当参数没有取到值时,用该字段替换SQL中的参数。

    • 参数取值方式:0:取常量值;1:隐藏元素中取;2:上级界面元中字段取;3:用户选择过滤得到;4树节点键值;5:当前界面元中字段取;6:页面Url参数中取;7:父窗口主界面元;8:父窗口细界面元(包括父窗口是单表时选择这种取值方式);9:用户选择过滤定位(用于定位式过滤,在界面元信息维护的查询SQL中需要编写第三套SQL,第三套SQL用于过滤定位,其用于返回定位行的记录号,在第三套SQL中定义的参数选择该取值方式)。其中78两种情况用于操作的弹出式界面参数取值。

    • 隐藏字段id当参数取值方式为隐藏元素中取时,页面隐藏Dom元素的Id

    • 取值字段名:当参数取值方式=2时,从页面字段中取值的字段名;当参数取值方式=3时,设置一个唯一的参数名,在用户过滤后从这个取值字段名中取,这里要说明的是,在过滤参数定义中的过滤参数当其输入方式为0(输入)和1(日历下拉框)时,过滤参数定义中的参数物理名要与该取值字段名相同,在过滤参数定义中的过滤参数当其输入方式为其他情况时,过滤参数定义中的对应键字段要与该取值字段名相同。否则用户过滤后将不起作用。


     

    文本输入框的属性设置界面如下:

    多列下拉文本框的属性设置界面如下:

    
    展开全文
  • Vant-UI 表单组件(Field组件):验证表单元素&&表单提交:

    Vant-UI 表单组件(Field组件):验证表单元素&&表单提交:


    示例截图 · 如下:

    示例 · 详细代码 · 如下:

    <template>
      <div class="hello">
        <!-- 导航栏 代码省略-->
        
        <!-- 登录页 用户表单 -->
          <van-cell-group>
            <van-field
              v-model="username"
              clearable
              label="用户名"
              right-icon="question-o"
              placeholder="请输入用户名"
              left-icon="contact"
              @click-right-icon="$toast('用户名必须是手机号')"
            />
            
            <van-field
              v-model="password"
              clearable
              type="password"
              label="密码"
              right-icon="question-o"
              placeholder="请输入密码"
              left-icon="closed-eye"
              @click-right-icon="$toast('密码必须是数字、字母、下划线')"
            />
            <!--登录按钮-->
            <div class="pd15"><van-button type="primary" size="large" @click="onClickButtonSubmit">登录</van-button></div>
          </van-cell-group>
      </div>
    </template>
    
    <script>
    import axios from 'axios'
    const token = '123456';
      export default {
        name: 'login',
        data () {
          return {
            errors: [],
            username: "",
            password: ""
          }
        },
        methods: {
          onClickRight() {
            this.$toast('请填写注册信息');
            this.$router.push({ path:'/register'});
          },
          // 表单提交
          onClickButtonSubmit: function (e,username,password) {
            if(this.username == ''){
              this.$toast("用户名不能为空");
              return false;
            }
            if(this.password == ''){
              this.$toast("密码不能为空");
              return false;
            }
            else{
                  // this.$toast('token='+token);
             	 var that=this // 放置指针,便于then操作的获取
    
              axios.get('接口地址', {
                  params: {
                      userName: this.username
                  }
              }).then(function (response) {
                  console.log(response);
                  var reslutData=response;  
                  console.log(reslutData.data.status )
                  if(reslutData.data.status == 1002){
                      this.$toast(reslutData.data.desc);
                  }
                  if(reslutData.data.status == 1000){
                      this.$toast(reslutData.data.desc);
                      this.$router.push({
                      path: '/receData',
                      query: {
                        reslutData
                      }
                    });
                  }              
              }.bind(this))
              .catch(function (error) {
                  console.log("请求失败"+error);
              });        
              e.preventDefault();
            }
          },
          validEmail: function (password) {
            var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
            return re.test(password);
          }
        }
      }
    </script>
    
    <!-- Add "scoped" attribute to limit CSS to this component only -->
    <style>
      
    </style>
    
    

    vant为什么本人不使用<form>标签提交表单?

    • 因为使用了<form> </form>之后,<form> </form>内的<vant-button>都会有提交表单的功能。
    • 当然,这不是我们所需要的。

    vant-ui表单不需要使用form标签,也可以获取表单元素的值

    获取表单值方法?

    • data (){}内部return 定义了数据之后,
    • 再次在自定义的函数内作为定义的参数引入,
    • 然后调用this.定义对象,就可以获取你需要的值。

    具体查看上述代码。

    表单如何自定义验证?

    在自定义的函数内,获取了你需要的值之后,你就可以自定义if (验证条件){}校验验证规则进行数据筛选与验证了。

    if 的(验证条件)就是指:正则表达式或者 其他自定义验证规则。
    .
    这里不再赘述详细规则,可自定义或引用第三方验证插件。
    .

    具体查看上述代码。

    表单如何提交?

    获取到了表单的值,可以拼接成string字符串,直接使用:

    <vant-button @click="onClickButtonSubmit"> 提交表单 </vant-button>
    

    进行表单提交。

    具体查看上述代码。

    具体提交方式,以及提交的数据格式、类型,可以根据项目需求,自定义方式和格式。
    这里不再赘述。


    以上就是关于“ Vant-UI 表单组件(Field组件):验证表单元素&&表单提交 - 踩坑篇 ” 的全部内容。

    展开全文
  • flutter之表单组件

    千次阅读 2019-03-04 15:05:39
    表单两个重要的组件,一个是Form组件用来做整个表单提交使用的,另一个是TextFormFiled组件用来做用户输入的。 Form组件的属性 key:组件在整个Widget树中的key值 autovalidate:是否自动提交表单 child:组件....

    表单是一个包含表单元素的区域。表单元素允许用户输入内容,比如:文本域、下拉列表、单选框、复选框等。常见的应用场景有:登录、注册、输入信息等。表单里有两个重要的组件,一个是Form组件用来做整个表单提交使用的,另一个是TextFormFiled组件用来做用户输入的。

    Form组件的属性

    key:组件在整个Widget树中的key值

    autovalidate:是否自动提交表单

    child:组件child只能有一个子组件

    onchanged:当FormFiled值改变时的回调函数

    TextFormFiled组件的属性

    autovalidate:自动验证值

    initialValue:表单字段初始值,比如:输入收货地址时,默认回填本的的地址信息

    onSaved:当Form表单调用保存方法Save时回调的函数

    validator:Form表单验证器

    为了获取表单是实例,我们需要设置一个全局类型的key,通过这个key的属性,来获取表单对象。需要使用GlobalKey来获取,代码如下:

    GlobalKey<FormState> loginKey = new GlobalKey<FormState>();

    示例代码:

     

     

     

    示例效果:

     

     

    展开全文
  • vue 封装Form表单组件

    千次阅读 2020-07-07 20:17:09
    回显表单信息 + 验证表单 + 提交表单信息,而表单的类型也很多(复选框,单选框,下拉框,输入框,文本框等等等)如果多个页面都表单验证的交互且表单的内容不一样,难道我们就要去写多个表单组件吗???那该...

    - 前景

    在项目中很常见的交互:回显表单信息 + 验证表单 + 提交表单信息,而表单的类型也有很多(复选框,单选框,下拉框,输入框,文本框等等等)如果多个页面都有表单验证的交互且表单的内容不一样,难道我们就要去写多个表单组件吗???那该怎么办呢????

    - 作用

    根据element-ui 的Form表单组件,写了一个公共的组件,可以满足大多数的表单类型的验证,做的这个组件主要是以弹窗的形式在页面上展示
    主要的功能:
    -显示弹窗(根据传入的数据来决定来显示表单)
    -验证表单信息
    -提交表单信息

    - 具体代码

    App.vue

    想法:把弹窗组件挂载在app上,通过provide/inject实现跨级访问祖先组件的数据

    <template>
        <div id="app">
            <router-view :key="key"/>
            <form-dialog ref="formDialog" />
        </div>
    </template>
    
    <script>
    import formDialog from '@/components/dialogFrom'
    export default {
        name: 'App',
        components: {
            formDialog
        },
        computed: {
            key() {
                return this.$route.path + Math.random()
            }
        },
        provide() {
            const me = this
            return {
                showForm(...args) {
                    me.$refs.formDialog.showDialog(...args)
                }
            }
        }
    }
    </script>
    

    dialogFrom.vue(对应的弹窗组件)

    <template>
        <el-dialog
            :title="formTitle"
            :visible.sync="formVisible"
            :close-on-click-modal="false"
            width="960px"
            class="common-form">
            <el-form ref="form" :model="formData" :rules="formRule" label-width="130px">
                <el-form-item v-for="(item, i) in formColumns" :key="i" :prop="item.property" :label="item.title">
                    <!-- 文本框textarea -->
                    <el-input
                        v-if="item.type === 'textarea'"
                        v-model.number="formData[item.property]"
                        v-bind="item.bind"
                        :placeholder="item.placeholder||'请输入'"
                        rows="7"
                        type="textarea"
                    />
                    <!-- radio -->
                    <div v-else-if="item.type=='radio'" class="radio-wrapper">
                        <el-radio v-for="(opt, j) in item.options" :key="j" :label="opt.id" v-model="formData[item.property]">{{ opt.name }}</el-radio>
                    </div>
                    <!-- 多选框checkbox -->
                    <div v-else-if="item.type=='checkbox'" class="checkbox-wrapper">
                        <el-checkbox v-if="item.isAllCheck" :indeterminate="item.isIndeterminate" v-model="item.checkAll" @change="handleCheckAllChange(item)">全选</el-checkbox>
                        <el-checkbox-group v-model="formData[item.property]" @change="handleCheckedUserGroupChange(item)">
                            <el-checkbox v-for="(opt, j) in item.options" :key="j" :label="opt.id">{{ opt.name }}</el-checkbox>
                        </el-checkbox-group>
                    </div>
                    <!-- 两个input + 加减按钮 -->
                    <div v-else-if="item.type === 'mutliInput'" class="mutli-input-wrapper">
                        <ul class="mutli-input" >
                            <li v-for="(element, index) in formData[item.property]" :key="index" class="input-list">
                                <div class="input-wrapper">
                                    <el-input
                                        v-model="element.key"
                                        :placeholder="item.placeholder ||'请输入'" />
                                    <el-input
                                        v-model="element.value"
                                        :placeholder="item.placeholder||'请输入'" />
                                </div>
                                <div class="handle-btn">
                                    <el-button type="primary" icon="el-icon-plus" circle @click="addConfigInput(item, formData[item.property], index)"/>
                                    <el-button :disabled="item.isDelete" type="danger" icon="el-icon-delete" circle @click="cutConfigInput(item, formData[item.property], index)" />
                                </div>
                            </li>
                        </ul>
                    </div>
                    <!-- 下拉框 + 是否可以多选 -->
                    <el-select
                        v-else-if="item.type === 'select'"
                        :multiple="item.multiple"
                        :disabled="item.disabled || false"
                        v-model="formData[item.property]"
                        v-bind="item.bind"
                        :placeholder="item.placeholder || '请选择'"
                    >
                        <el-option v-for="(opt, j) in item.options" :key="j" :label="opt.name" :value="opt.id" />
                    </el-select>
                    <div v-else-if="item.type === 'upload'" class="avatarUploader">
                        <el-upload
                            :show-file-list="false"
                            :before-upload="beforeUpload('image', item.property)"
                            accept="image/gif, image/jpeg"
                            drag
                            action="">
                            <img v-if="formData[item.property]" :src="formData[item.property]" class="avatar">
                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                        </el-upload>
                    </div>
                    <div v-else-if="item.type === 'uploadAudio'" class="avatarUploader">
                        <el-upload
                            :show-file-list="false"
                            :before-upload="beforeUpload('audio', item.property)"
                            drag
                            action="">
                            <i class="el-icon-plus avatar-uploader-icon"></i>
                        </el-upload>
                        <span v-if="formData[item.property]">{{ formData[item.property] }}</span>
                    </div>
                    <!-- 密码 -->
                    <div v-else-if="item.type === 'password'" class="pass-box">
                        <el-input
                            v-model="formData[item.property]"
                            v-bind="item.bind"
                            :placeholder="item.placeholder||'请输入'"
                            :type="item.pwdType"
                        />
                        <span class="show-pwd" @click="showPwd(item)">
                            <svg-icon :icon-class="item.pwdType === 'password' ? 'eye' : 'eye-open'" />
                        </span>
                    </div>
                    <el-input
                        v-else-if="item.type === 'englishText'"
                        v-model="formData[item.property]"
                        v-bind="item.bind"
                        :placeholder="item.placeholder||'请输入'"
                    />
                    <el-input
                        v-else-if="item.type === 'preText'"
                        v-model="formData[item.property]"
                        v-bind="item.bind"
                        :placeholder="item.placeholder||'请输入'">
                        <template slot="prepend">/</template>
                    </el-input>
                    <el-input
                        v-else-if="item.type === 'authText'"
                        v-model="formData[item.property]"
                        v-bind="item.bind"
                        :placeholder="item.placeholder||'请输入'">
                    </el-input>
                    <el-input
                        v-else-if="item.type === 'text' || item.type === 'input'"
                        :disabled="item.disabled || false"
                        v-model="formData[item.property]"
                        v-bind="item.bind"
                        :placeholder="item.placeholder||'请输入'"
                    />
                </el-form-item>
                <el-form-item>
                    <div class="dialog-btn">
                        <el-button type="primary" @click="onSubmit">确定</el-button>
                        <el-button @click="onHide">取消</el-button>
                    </div>
                </el-form-item>
            </el-form>
        </el-dialog>
    </template>
    <script>
    var formCallback = () => {}
    const qiniu = require('qiniu-js')
    export default {
        data() {
            return {
                formTitle: '编辑',
                formVisible: false,
                formColumns: [],
                formRule: [],
                formData: {},
                currentName: '',
                reEnglish: /^[a-zA-Z_]{5,}$/,
                reMath: /^\d{6}$/,
                rePassword: /^.{6,18}$/
            }
        },
        watch: {
            formData: {
                handler(val, oldVal) {
                    this.setDataStatus(val)
                },
                deep: true,
                immediate: true
            }
        },
        methods: {
            setDataStatus(val) {
                // 多个input + 加减按钮
                const mutliInputInfo = this.formColumns.find(item => item.property === 'config_content' && item.type === 'mutliInput')
                // 复选框
                const checkboxInfo = this.formColumns.find(item => item.type === 'checkbox')
                if (mutliInputInfo) {
                    mutliInputInfo.isDelete = val[mutliInputInfo.property].length === 1
                }
                if (checkboxInfo) {
                    this.handleCheckedUserGroupChange(checkboxInfo)
                }
            },
            showDialog({ formColumns, formData, formTitle }, callback) {
                formCallback = callback
                this.formTitle = formTitle || this.formTitle
                this.formVisible = true
                this.formColumns = formColumns
                this.createForm(formColumns, formData)
                this.$nextTick(() => {
                    this.$refs.form.clearValidate()
                })
            },
            onSubmit() {
                this.$refs.form.validate((valid) => {
                    if (valid) {
                        Promise.resolve(formCallback(Object.assign({}, this.formData))).then((result) => {
                            if(result === true){
                                this.formVisible = false
                            }
                        })
                    } else {
                        console.log('validate fail')
                    }
                })
            },
            onHide() {
                this.formVisible = false
                this.$refs.form.resetFields()
                formCallback = () => {}
            },
            createForm(formColumns, formData) {
                var data = {}
                var rule = {}
                formColumns.forEach(col => {
                    if (col.type === 'select' && col.multiple) {
                        data[col.property] =  formData[col.property] === 'undefined' ? [] : formData[col.property]
                        rule[col.property] = this.genRule(col)
                    } else if(col.hasOwnProperty('property')){
                        data[col.property] = formData[col.property]
                        rule[col.property] = this.genRule(col)
                    } else if(typeof formData[col.property] === 'undefined'){
                        data[col.name] = typeof formData[col.name] === 'undefined' ? '' : formData[col.name]
                        rule[col.name] = this.genRule(col)
                    }
                })
                this.formData = data
                this.formRule = rule
            },
            addConfigInput(item, element, index) {
                if (item.isLimit && element.length >= item.isLimit) {
                    this.$message({
                        message: `最多只能添加${item.isLimit}条`,
                        type: 'warning'
                    })
                    return
                }
                element.splice(index + 1, 0, { key: '', value: '' })
            },
            cutConfigInput(item, element, index) {
                if (item.isDelete) return
                element.splice(index, 1)
            },
            // 复选框勾选
            handleCheckedUserGroupChange(item) {
                const checkedCount = this.formData[item.property].length
                item.checkAll = checkedCount === item.options.length
                item.isIndeterminate = checkedCount > 0 && checkedCount < item.options.length
            },
            // 复选框全选
            handleCheckAllChange(item) {
                this.formData[item.property] = item.checkAll ? item.options.map(item => item.id) : []
                item.isIndeterminate = false
            },
            // 得到当前上传图片的name
            getCurrentName(ev) {
                this.currentName = ev.currentTarget.getAttribute('data-name')
            },
            // 上传图片
            beforeUpload(mime, property) {
                // console.log('beforeUpload', mime, property)
                const me = this
                return (file)=>{
                    this.$request.get('file/token', { params: { dir: 'adminas', num: 1, mime: "" }}).then(res => {
                    // console.log(res, 'res')
                        res = res[0]
                        const observable = qiniu.upload(file, res.key, res.token)
                        observable.subscribe({
                            complete(imageInfo) {
                                me.formData[property] = imageInfo.data.url
                            },
                            error(err) {
                                console.log("error:", err)
                            }
                        })
                        return false
                    }).catch(error => {
                        console.error(error)
                    })
                }
            },
            // 是否显示密码
            showPwd(it) {
                if (it.pwdType === 'password') {
                    it.pwdType = ''
                } else {
                    it.pwdType = 'password'
                }
            },
            genRule(column) {
                const r = {
                    message: `请输入${column.title || column.name}`,
                    trigger: 'blur'
                }
                // 验证规则
                this.verifyInput(r, column)
                r.required = !!column.required
                return r
            },
            verifyInput(r, column) {
                switch (column.type) {
                    case 'englishText':
                        r.validator = (rule, value, callback) => {
                            if (!value) {
                                return callback(new Error('英文名称不能为空!'))
                            }
                            if (this.reEnglish.test(value)) {
                                callback()
                            }else{
                                callback(new Error('该项必须为英文字母,并且长度不能少于5个字符!'))
                            }
                        }
                        break
                    case 'authText':
                        r.validator = (rule, value, callback) => {
                            if (!value) {
                                return callback(new Error('验证码不能为空!'))
                            }
                            if (this.reMath.test(value)) {
                                callback()
                            }else{
                                callback(new Error('验证码必须为6个字符的数字!'))
                            }
                        }
                        break
                    case 'password':
                        r.validator = (rule, value, callback) => {
                            if (!value) {
                                return callback(new Error('密码不能为空!'))
                            }
                            if (this.rePassword.test(value)) {
                                callback()
                            } else {
                                callback(new Error('密码长度应该在6-18个字符之间!'))
                            }
                        }
                        break
                    case 'mutliInput':
                        r.validator = (rule, value, callback) => {
                            const isRequiredConfig = value.every(item => item.key !== '' && item.value !== '')
                            // 判断key值是否重复
                            const keyList = []
                            value.forEach(item => {
                                if (keyList.indexOf(item.key) !== -1) {
                                    return callback(`${column.title || column.name}的key值不得重复`)
                                }
                                keyList.push(item.key)
                            })
                            if (!isRequiredConfig) {
                                return callback(r.message)
                            }
                            callback()
                        }
                        break
                }
                r.message = ''
            }
        }
    }
    </script>
    <style>
    .common-form .el-upload-dragger {
        width: 100px !important;
        height: 100px !important;
    }
    </style>
    <style lang="scss">
        .common-form {
            .avatar-uploader .el-upload {
                border: 1px dashed #d9d9d9;
                border-radius: 6px;
                cursor: pointer;
                position: relative;
                overflow: hidden;
            }
            .avatar-uploader .el-upload:hover {
                border-color: #409EFF;
            }
            .avatar-uploader-icon {
                font-size: 28px;
                color: #8c939d;
                width: 100px;
                height: 100px;
                line-height: 100px;
                text-align: center;
            }
            .avatar {
                width: 100px;
                height: 100px;
                display: block;
            }
            .pass-box{
                position: relative;
                .show-pwd{
                    position: absolute;
                    right: 335px;
                    top: 2px;
                    cursor: pointer;
                    user-select: none;
                }
            }
            .mutli-input-wrapper {
                .input-list {
                    font-size: 0;
                    margin-bottom: 15px;
                    &:last-child {
                        margin-bottom: 0;
                    }
                }
                .input-wrapper, .handle-btn {
                    display: inline-block;
                    vertical-align: middle;
                    font-size: 14px;
                }
                .el-input {
                    width: 300px !important;
                    margin-right: 15px;
                    &:last-child {
                        margin-right: 0;
                    }
                }
                .handle-btn {
                    margin-left: 15px;
                }
            }
        }
    </style>
    

    如何去使用上面的这个表单组件呢?只需要在把下面的代码放在点击事件里就可以了

    this.showForm({
        formTitle: '', // 弹窗的标题
         formColumns: [], // 表单的类型
         formData: {}  // 初始化表单数据
     }, (data) => {
         console.log(data) // 表单里输入的数据
         // 把数据提交到后台, 注意这里的return, return true 主要是为了处理只要信息提交成功之后,才可以关闭弹窗
         return this.$request({
             method: method,
             url: url,
             data: data
         }).then(res => {
             this.getTableList()
             return true
         }).catch(error => {
             console.error(error)
         }).finally(() => {})
     })
    

    关于表单组件的各个字段的说明

    formTitle   		string        	弹窗的标题
    
    formColumns 	Array    		表单的类型
    eg:
     [{ property: 'name', title: '配置名:', type: 'text', required: true, placeholder: '请输入配置名' },
         { property: 'config_content', title: '配置内容:', type: 'mutliInput', required: true, placeholder: '配置内容', isLimit: 5, isDelete: false },
         { property: 'type', title: '类型:', type: 'select', required: true, disabled: false, placeholder: '请选择类型', multiple: false, options: [{ id: 'custom', name: 'custom' }, { id: 'service', name: 'service' }] },
         { property: 'checkbox_name', type: 'checkbox', required: true, isAllCheck: true, checkAll: false, isIndeterminate: true, options: [] } ]
    
    property   表示存储表单某类型数据的key值
    title   表示表单某类型对应的标题
    type 表示表单对应的类型
    required Boolean 是否为必填
    
    formData Object 初始化表单的数据
    eg: { checkbox_name: [] }
    

    上面只是进行了一个简单的表单类型的使用说明,大家有需要可以看一下dialogFrom.vue就知道怎么用啦

    展开全文
  • Uni-App - 组件 - 表单组件

    万次阅读 2019-02-20 12:47:31
    文档链接 http://uniapp.dcloud.io/component/button   概述 包含表单及常用表单元素的知识点讲解。
  • element-ui 表单组件的prop属性

    万次阅读 多人点赞 2018-11-13 19:11:38
    Vue组件库element-ui中的Form表单组件提供了表单验证功能 通过rules属性传入验证规则 Form-Item中的prop属性设置需要校验的字段名 如图所示,el-form-item元素的prop属性绑定字段名name,表单验证时,就会验证el-...
  • formService 表单组件

    千次阅读 2016-10-26 18:50:09
    act_hi_detail:动态表单字段存储 1.获取 //通过流程定义ID获取表单字段集合 StartFormData startFormData = formService.getStartFormData(processDefinitionId); TaskFormData taskFormData =...
  • 关于element的表单组件的笔记

    千次阅读 热门讨论 2021-02-02 15:47:35
    关于element的表单组件的笔记element表单及代码的展示 element表单及代码的展示
  • react实现表单组件

    千次阅读 2016-10-19 17:23:11
    2、废话少说,直接贴代码(注:这里把单选框和复选框定义成了两个子组件,子组件会调用父组件的方法)  react表单事件        var FormApp=React.createClass({  getInitialState:functi
  • Vue动态生成表单组件vue-form-maker

    千次阅读 2018-12-25 10:30:52
    Vue动态生成表单组件 可以根据数据配置表单 使用的UI库是iView 整体组件布局方式借鉴了form-create的写法 在此表示感谢 在Vue里 一般要用到什么组件或数据 都得提前声明 所以要根据数据来生成表单 只能使用Vue的...
  • input微信小程序组件_小程序表单组件_小程序输入框input属性名类型默认值说明最低版本valueString 输入框的初始内容 typeString"text"input 的类型 passwordBooleanfalse是否是密码类型 placeholder...
  • 实现Ant Design 自定义表单组件

    万次阅读 2017-06-20 19:44:22
    Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法(使用起来确实很爽),这时需要自己动手封装一些...
  • Element组件之Form表单

    千次阅读 2019-03-01 11:08:13
    这里主要介绍Element组件中的Form表单,它是由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。 典型表单:在 Form 组件中,每一个表单域由一个 Form-Item 组件构成,表单域中可以放置各种...
  • 表单组件 诸如 、、<option> 这样的表单组件不同于其他组件,因为他们可以通过用户交互发生变化。这些组件提供的界面使响应用户交互的表单数据处理更加容易。 交互属性表单组件支持几个受用户交互影响的属性:value...
  • React form 表单组件的解决方案

    千次阅读 2020-02-05 12:18:12
    来源 |https://imweb.io/topic/5ca03c119239213a22d7549d一直以来,表单对于前端来说都是一个不得不面对的坑。而对于设计一个表单组件来说,主要...
  • Bootstrap常用表单组件

    千次阅读 2017-04-07 14:59:54
    这个比较名气啦,不多说 p > < div class = "form-group" > < label > 基本示例 label > < div class = "input-group" > < select data-placeholder = "选择省份..." class = "chosen-...
  • 微信小程序组件_小程序表单组件_radio radio-group 单项选择器,内部由多个&lt;radio/&gt;组成。 属性名 类型 默认值 说明 bindchange EventHandle   &lt;radio-group/&gt;...
  • 敏捷思维学习Ext.Net MVC--3.10Form表单组件之其它常用组件  前面介绍了常用的Form表单组件,下面再介绍几种组件,就可以应付大多数表单组件的问题了。我们接下类介绍的多行文本字段、日期字段,甚至还有多选...
  • 微信小程序中的input等表单组件在form中,可以直接通过submit的方法来获取值 而在非form中,只能通过监听input的键盘输入获取 WXML &amp;lt;input class='create-title' placeholder=&quot;投票标题&...
  • antDesign获取表单组件的值

    千次阅读 2019-09-26 03:27:00
    返回的数据中error和value两种,如果存在error那就是其中某一个表单控件出了问题(比如一个必须填的项没有填 获取到了value后将之return出去 在从父组件中获取就可以了,在父组件中使用this.form.getFormValue...
  • 关于antd表单组件遇见的问题

    千次阅读 2018-11-29 10:48:21
    公司在用antd+mobx做表单时遇见一些问题,自己解决并记录下来 业务需求 点击新增按钮时,弹出一个嵌入Form的Modal,填写完毕后验证表单 点击编辑按钮时,弹出上一个Modal,并将以前的填写信息回显上去 遇见的问题...
  • Form标签 layout属性设置为’inline’ 时 下拉组件宽度没有自适应: // 方法1:用Row + Col 定义自己需要的宽度,把layout属性设置为'horizontal', const formLayout = { labelCol: { span: 4 }, wrapperCol: { spa...
  • element封装一个简单的表单组件

    千次阅读 2020-02-13 20:40:46
    这样的功能在后台系统中经常碰见 左边是一个输入框 右边是一个按钮 我这里使用element 组件书写的 当然左边也可能是 一个下拉框 或者是一...根据父组件传来的数据进行判断显示那种表单组件 我们首先先来完成表单子...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 169,042
精华内容 67,616
关键字:

表单组件有哪些