表单 KLForm

基本形式

一个表单元素占一行, 并且label通过设置宽度居右对齐

表单 KLForm - 图1

  1. <kl-form labelSize="80px">
    <kl-form-item title="订单号">
    <kl-input value="{billno}" width="300px" placeholder="订单号" />
    </kl-form-item>
    <kl-form-item title="支付方式">
    <kl-input value="{purchaseWay}" width="300px" placeholder="支付方式" />
    </kl-form-item>
    </kl-form>

表单项的说明

两种方式,一种是配置tip, 另外一种是设置descTemplate, descTemplate可以是简单的html字符串

表单 KLForm - 图2

  1. <kl-form labelSize="80px">
    <kl-form-item title="订单号" tip="订单号">
    <kl-input value="{billno}" width="300px" placeholder="订单号" />
    </kl-form-item>
    <kl-form-item title="支付方式" descTemplate="支付方式可填: 微信, 支付宝, 银联">
    <kl-input value="{purchaseWay}" width="300px" placeholder="支付方式" />
    </kl-form-item>
    </kl-form>

表单项label

label部分可设置labelSize, labelLineHeight, titleTemplate三个属性

  • labelSize可以设置在kl-form-item上, 如果kl-form下的kl-form-item的labelSize都一样,则可将labelSize设置在kl-form上
  • labelLineHeight用法同labelSize
  • titleTemplate支持简单的html字符串 表单 KLForm - 图3
  1. <kl-form>
    <kl-form-item title="订单号" descTemplate="32位订单号" labelSize="80px">
    <kl-input value="{billno}" width="300px" placeholder="订单号" />
    </kl-form-item>
    <kl-form-item title="支付方式" descTemplate="支付方式可填: 微信, 支付宝, 银联" labelSize="80px">
    <kl-input value="{purchaseWay}" width="300px" placeholder="支付方式" />
    </kl-form-item>
    <kl-form-item title="备注" labelSize="80px" labelLineHeight="lg">
    <kl-textarea width="300px" placeholder="备注" />
    </kl-form-item>
    </kl-form>

一行多个表单元素的布局

可以配合kl-rowkl-col栅格布局组件实现

表单 KLForm - 图4

  1. <kl-form labelSize="80px">
    <kl-row>
    <kl-col span=4>
    <kl-form-item title="订单号">
    <kl-input value="{billno}" placeholder="订单号" />
    </kl-form-item>
    </kl-col>
    <kl-col span=4>
    <kl-form-item title="支付方式">
    <kl-input value="{purchaseWay}" placeholder="支付方式" />
    </kl-form-item>
    </kl-col>
    <kl-col span=4>
    <kl-form-item title="商品名称">
    <kl-input value="{goodsName}" placeholder="商品名称" />
    </kl-form-item>
    </kl-col>
    </kl-row>
    </kl-form>

下拉选项列表获取

此项功能需要后端配合实现一个接口,该接口接收以逗号间隔的key值,并解析后返回对应key值的下拉列表; 请打开浏览器开发者工具, 在network中查看对应请求的数据格式

  • 默认返回的数据格式是被包裹在data中, 如果路径不满足需求,可以通过设置sourcePath自定义访问数据的路径 表单 KLForm - 图5
  1. <kl-form labelSize="80px" service="{api}">
    <kl-row>
    <kl-col span=4>
    <kl-form-item title="支付方式" sourceKey="purchaseWays">
    <kl-select value="{purchaseWay}" />
    </kl-form-item>
    </kl-col>
    <kl-col span=4>
    <kl-form-item title="跨境方式" sourceKey="importTypes">
    <kl-select value="{importType}" />
    </kl-form-item>
    </kl-col>
    <kl-col span=4>
    <kl-form-item title="仓库" sourceKey="warehouses">
    <kl-select value="{warehouse}" />
    </kl-form-item>
    </kl-col>
    </kl-row>
    </kl-form>
  1. var component = new NEKUI.Component({
    template: template,
    config: function() {
    this.data.api = '../data/KLForm.json';
    },
    });

表单项layout

表单 KLForm - 图6

  1. <p>inline</p>
    <kl-form>
    <kl-row>
    <kl-col span=12>
    <kl-form-item title="订单号" layout="inline">
    <kl-input value="{billno}" placeholder="订单号" />
    </kl-form-item>
    <kl-form-item title="支付方式" layout="inline">
    <kl-input value="{purchaseWay}" placeholder="支付方式" />
    </kl-form-item>
    <kl-form-item title="商品名称" layout="inline">
    <kl-input value="{goodsName}" placeholder="商品名称" />
    </kl-form-item>
    </kl-col>
    </kl-row>
    </kl-form>
    <p>全局inline</p>
    <kl-form inline class="f-mt10">
    <kl-row>
    <kl-col span=12>
    <kl-form-item title="订单号">
    <kl-input value="{billno}" placeholder="订单号" />
    </kl-form-item>
    <kl-form-item title="支付方式">
    <kl-input value="{purchaseWay}" placeholder="支付方式" />
    </kl-form-item>
    <kl-form-item title="商品名称">
    <kl-input value="{goodsName}" placeholder="商品名称" />
    </kl-form-item>
    </kl-col>
    </kl-row>
    </kl-form>
    <p>vertical</p>
    <kl-form>
    <kl-row>
    <kl-col span=4>
    <kl-form-item title="订单号" layout="vertical">
    <kl-input value="{billno}" placeholder="订单号" />
    </kl-form-item>
    </kl-col>
    <kl-col span=4>
    <kl-form-item title="支付方式" layout="vertical">
    <kl-input value="{purchaseWay}" placeholder="支付方式" />
    </kl-form-item>
    </kl-col>
    <kl-col span=4>
    <kl-form-item title="商品名称" layout="vertical">
    <kl-input value="{goodsName}" placeholder="商品名称" />
    </kl-form-item>
    </kl-col>
    </kl-row>
    </kl-form>

简单表单验证

如果表单项是必填,则可以在kl-form-item上配置required属性,并通过message配置未填写时的提示文案; 除了最基本的必填校验外,各表单元素组件可以通过配置rules属性实现各种复杂的校验; 参见复杂表单验证

表单 KLForm - 图7

  1. <kl-form labelSize="80px" ref="form">
    <kl-form-item title="订单号" required message="请填写订单号">
    <kl-input value="{billno}" width="300px" placeholder="订单号" />
    </kl-form-item>
    <kl-form-item title="支付方式" required>
    <kl-input value="{purchaseWay}" width="300px" placeholder="支付方式" />
    </kl-form-item>
    <kl-form-item title="跨境方式" required>
    <kl-select value="{importType}" source="{importTypes}" width="300px" />
    </kl-form-item>
    <kl-form-item title="国家" required>
    <kl-check-group source="{countryList}" block />
    </kl-form-item>
    <kl-form-item title="起运时间" required>
    <kl-date-picker value="{startTime}" width="300px" />
    </kl-form-item>
    <kl-form-item title="仓库" required>
    <kl-multi-select value="{warehouse}" source="{warehouses}" width="300px" />
    </kl-form-item>
    <kl-form-item title="备注" required>
    <kl-textarea value="{remark}" width="300px" />
    </kl-form-item>
    <div style="padding-left:88px">
    <kl-button type="secondary" on-click="{this.validate()}" title="提交" />
    </div>
    </kl-form>
  1. var component = new NEKUI.Component({
    template: template,
    config: function() {
    this.data.importTypes = [{ id: 1, name: '海淘' }, { id: 2, name: '一般贸易' }];
    this.data.countryList = [{ id: 1, name: '中国' }, { id: 2, name: '美国' }];
    this.data.warehouses = [{ id: 1, name: '宁波仓' }, { id: 2, name: '重庆仓' }];
    },
    validate: function() {
    var $form = this.$refs.form;
    return $form.validate().success;
    }
    });

复杂表单验证

每个表单元素都内置一些基本的校验属性, 如input设置type=”email”, 触发校验时就会校验用户输入的是否是合法的email地址;

除内置的基本校验属性外, 每个表单元素组件都有一个rules属性, rules属性的基本格式是{type: '',message: ''}, type的可选值参见validatorJS

如果需要自定义验证函数, 可配置method属性

表单 KLForm - 图8

  1. <kl-form labelSize="80px" ref="form">
    <kl-form-item title="用户邮箱" required>
    <kl-input type="email" value="{email}" width="300px" placeholder="用户邮箱" />
    </kl-form-item>
    <kl-form-item title="支付方式" required descTemplate="输入的值中应包含pay">
    <kl-input rules="{purchaseWayRule}" value="{purchaseWay}" width="300px" placeholder="支付方式" />
    </kl-form-item>
    <kl-form-item title="国家" required tip="最多选择2个国家">
    <kl-check-group source="{countryList}" min=1 max=2 />
    </kl-form-item>
    <kl-form-item title="备注" required descTemplate="最多输入10个字">
    <kl-textarea rules="{remarkRule}" value="{remark}" width="300px" placeholder="备注" />
    </kl-form-item>
    <div style="padding-left:88px">
    <kl-button type="secondary" on-click="{this.validate()}" title="提交" />
    </div>
    </kl-form>
  1. var component = new NEKUI.Component({
    template: template,
    config: function() {
    this.data.importTypes = [{ id: 1, name: '海淘' }, { id: 2, name: '一般贸易' }];
    this.data.countryList = [{ id: 1, name: '中国' }, { id: 2, name: '美国' }, { id: 3, name: '英国' }];
    this.data.warehouses = [{ id: 1, name: '宁波仓' }, { id: 2, name: '重庆仓' }];
    this.data.purchaseWayRule = [{
    message: '输入的值中应包含pay', method: function(value) {
    return value.toLowerCase().indexOf('pay') != -1;
    }
    }];
    this.data.remarkRule = [{
    message: '最多输入10个字', method: function(value) {
    return value.length <= 10;
    }
    }];
    },
    validate: function() {
    var $form = this.$refs.form;
    return $form.validate().success;
    }
    });

API

KLForm

KLForm

ParamTypeDefaultDescription
[options.data]object= 绑定属性
[options.data.service]string=> 全站异步获取source的接口地址
[options.data.class]string=> 扩展样式
[options.data.inline]boolean=> 如果true,kl-form-item按照inline-block排列
[options.data.sourcePath]string"data"=> 获取到select数据后,读取json数据的路径
[options.data.labelSize]string/number=> 批量设置kl-form-item的labelSize,取值与kl-form-item的labelSize相同
[options.data.labelLineHeight]string/number=> 批量设置kl-form-item的labelLineHeight,取值与kl-form-item的labelLineHeight相同

.validate() 验证所有表单组件method

Returns: object - conclusion 结果说明

sourceCompleted kl-form自动获取sourceKey异步数据后触发Event

NameTypeDescription
senderobject事件发送对象
resultobject所有异步数据

KLFormItem

KLFormItem

ParamTypeDefaultDescription
[options.data]object= 绑定属性
[options.data.title]string=> label显示的文字
[options.data.titleTemplate]string=> title 模板
[options.data.descTemplate]string=> 说明区块模板
[options.data.cols]number=> [deprecated]布局列数, 请使用布局组件代替直接设置cols属性
[options.data.labelCols]number=> [deprecated]如果有title, label占的列数, 建议使用labelSize
[options.data.labelSize]string/number200=> 如果有title, label占的宽度,可以是px单位的数字,也可以是sm, md, lg, xlg
[options.data.labelLineHeight]string"'2.5'"=> label line-height 属性: 可以是数字值,也可以是sm(值:1), md(值:1.6), lg(值:2.5)
[options.data.textAlign]string"none"=> label text-align 属性:none/left/right
[options.data.required]booleanfalse=> 是否必选项
[options.data.tip]string=> 字段说明
[options.data.class]string=> 样式扩展
[options.data.layout]string=> 排列方式: 默认(横着排)/vertical/inline;
[options.data.sourceKey]string=> 异步获取下拉列表接口的索引值