最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vux-form——一个base vux的form解决方案

    正文概述 掘金(逸杰)   2021-02-20   750

    前言

    vue移动端有很多优秀的组件库,其中个人开发者airyland开发的开源组件库vux在众多公司级别的开源组件库中独树一帜,拥有高达17.4k的star。

    但是在业务开发中使用vux存在一个长期的痛点:移动端表单的需求很常见,而vux缺少一个统一管理表单项的组件。因此vux-form应运而生。

    它解决了什么问题呢?

    • 统一表单的校验方式,以及校验提醒的样式
    • 统一表单的取值方法submit

    它又支持哪些特性呢?

    • 支持多种内置组件,提高表单编写效率
    • 支持内置组件的命名插槽和作用域插槽
    • 支持自定义表单项
    • 提供重置表单方法resetFields,清除校验方法clearValidate

    vux-form

    百闻不如一见,下面是线上demo:

    ejayyoung.github.io/vux-form/

    vux-form——一个base vux的form解决方案

    如何安装

    使用npm或者yarn安装

    npm install -S vux-form
    // or
    yarn add vux-form
    

    基本用法

    <template>
      <vux-form
        ref="form"
        :model="formData"
      >
        <vux-form-field
          type="input"
          prop="aa"
          
          placeholder="please enter"
          required
          message="Input is required"
        ></vux-form-field>
      </vux-form-field>
    </template>
    <script>
      import { VuxForm, VuxFormField } from 'vux-form'
      export default {
        components: {
          VuxForm,
          VuxFormField
        },
        data() {
          return {
            formData: {
              aa: ''
            }
          }
        }
      }
    </script>
    

    如何传递内置组件的props

    通过vux-form-fieldprops属性传递

      <vux-form-field
        type="input"
        prop="aa"
        
        placeholder="please enter"
        :props="{
          'type': 'email',
          'readonly': true,
          'text-align': 'right'
        }"
      ></vux-form-field>
    

    如何传递内置组件的事件

    通过vux-form-fieldevents属性传递

    <vux-form-field
      type="input"
      prop="aa"
      
      placeholder="please enter"
      :events="{
        'on-focus': handleInputFocus,
        'on-blur': handleInputBlur
      }"
    ></vux-form-field>
    

    如何传递内置组件的命名插槽

    <vux-form-field
      type="input"
      
      prop="aa"
      placeholder="please enter"
    >
      <span slot="label">named slot label</span>
      <x-button
        slot="right"
        type="primary"
        action-type="button"
        mini
      >发送验证码</x-button>
    </vux-form-field>
    

    如何传递内置组件的作用域插槽

    <vux-form-field
      type="radio"
      
      prop="bb"
      :props="{
        options
      }"
    >
      <template
        slot-scope="props"
        slot="each-item"
      >
        <p>
          custom item
          <img
            src="https://github.com/airyland/vux/blob/v2/logo.png?raw=true"
            class="vux-radio-icon"
          />
          {{ props.label }}
          <br />
          <span style="color:#666;">{{ props.index + 1 }} another line</span>
        </p>
      </template>
    </vux-form-field>
    

    如何定义校验规则

    校验规则的定义可以参考async-validator

    <vux-form-field
      type="input"
      prop="aa"
      
      placeholder="please enter"
      :props="{
        type: 'number'
      }"
      :rules="[
        { required: true, message: 'input is required' },
        {
          validator(rules, value, cb) {
            if (value > 0) {
              cb()
            } else {
              cb('请输入大于0的数字')
            }
          }
        }
      ]"
    ></vux-form-field>
    

    如何自定义表单项

    vux-form-field绑定prop用于校验,其slot就用于渲染自定义组件

    <vux-form-field
      prop="aa"
    >
      <custom-component v-model="formData.aa"></custom-component>
    </vux-form-field>
    

    props

    VuxForm

    propertytypedefaultdescription
    modelObject{}表单数据对象,在使用validate方法情况下,为必填

    VuxFormField

    propertytypedefaultdescription
    propString-表单域字段,传入VuxForm组件的model中的key,在使用validate方法情况下,为必填titleString-label标签的文本placeholderString-表单域占位符的文本typeString-内置组件类型,目前已有:input, textarea, number, datetime, picker, radio, uploaderpropsObject-内置组件对应组件的props, 参考demoeventsObject-内置组件对应组件的events, 参考demorulesArray | Object-校验规则,参考async-validatorrequiredBoolean-是否必填messageString-校验提示语

    支持的内置组件类型

    typecomponent
    inputx-inputtextareax-textareanumberx-numberdatetimedatetimepickerpopup-pickerradiopopup-radiouploadervux-uploader-component

    表单方法

    methoddescriptionparams
    validate对整个表单进行校验的方法,参数为一个回调函数,该回调函数会在校验结束后被调用,并传入两个参数:valid(是否校验通过),invalidFields(未通过校验的字段),若不传入回调函数,则会返回一个promiseFunction(callback: Function(valid: Boolean, invalidFields: Object)submit提交表单同上resetFields对整个表单进行重置,将所有字段值重置为初始值并移除校验结果-clearValidate移除表单项的校验结果,传入待移除的表单项prop或者prop组成的数组,如不传则移除整个表单的校验结果Function(props: array | string)

    最后

    目前该组件已在线上业务稳定上线一年多,用户使用反馈良好。

    所以看到的小伙伴可以尝试一下vux-form,有问题或好的想法都可以提issue

    原创不宜,也请不要吝啬你们手中的Star :)


    起源地下载网 » vux-form——一个base vux的form解决方案

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元