需要在Table组件中,嵌套各种表单控件并实现验证,但官方例子中,要求prop必须绑定到el-form-item组件,由于该组件绑定了样式,需要做额外的样式重置工作。
目前我是自定义的丑陋的验证规则,请求改进prop的绑定方式。
需要在Table组件中,嵌套各种表单控件并实现验证,但官方例子中,要求prop必须绑定到el-form-item组件,由于该组件绑定了样式,需要做额外的样式重置工作。
目前我是自定义的丑陋的验证规则,请求改进prop的绑定方式。
是的,目前必须使用form-item
@xiongsongsong 请问你这个动态表单是怎么绑定验证规则的?比如你图中的table,如果是动态的添加row,验证规则怎么写,试了半天未果
截取了部分源码:
<el-table :data="stock.tableData" style="width: 100%;height:100%;font-size:12px;">
<el-table-column label="名称" width="180">
<template scope="scope">
<el-form-item
:prop="'tableData.'+scope.$index+'.yptym'"
:key="scope.row.key"
:rules="{required: true, message: '名称不能为空', trigger: 'blur,change'}">
<el-input :value="scope.row.yptym"
v-table-select="scope.row"
tpl="stockInTpl"
size="small"/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="失效日期" width="125">
<template scope="scope">
<el-row v-if="notRequireInputDateGS.indexOf(stock.gs)>-1">不需要填写</el-row>
<el-row v-else>
<el-form-item
:prop="'tableData.'+scope.$index+'.expired'"
:key="scope.row.key"
:rules="{type: 'object', required: true, message: '选择失效日期', trigger: 'change'}">
<el-date-picker
v-model="scope.row.expired"
type="date"
size="small"
placeholder="失效日期">
</el-date-picker>
</el-form-item>
</el-row>
</template>
</el-table-column>
<el-table-column align="right" label="进货价格">
<template scope="scope">
<el-form-item
:prop="'tableData.'+scope.$index+'.purchasePrice'"
:key="scope.row.key"
:rules="{type: 'number',required: true,min: 0.0001, message: '价格必须填写', trigger: 'change'}">
<el-input size="small" class="number"
v-model.number="scope.row.purchasePrice"
@change="computedMoney(scope.row)"/>
</el-form-item>
</template>
</el-table-column>
<el-table-column align="right" label="入库数量">
<template scope="scope">
<el-form-item
:prop="'tableData.'+scope.$index+'.count'"
:key="scope.row.key"
:rules="{type: 'number',min: 0 ,required: true, message: '价格必须填写', trigger: 'change'}">
<el-input size="small" class="number" v-model.number="scope.row.count"
@change="computedMoney(scope.row)"/>
</el-form-item>
</template>
</el-table-column>
<el-table-column align="right" prop="cost" label="进货金额" width="90"></el-table-column>
</el-table>
el-table 外层还需要 el-form吗? 直接使用 el-form-item 好像不行 @xiongsongsong
@tingrun919 必须包含在el-form中,才会启用验证。
遇到同样的问题。输入在table里,看了下vue-validitor和另外一个插件,觉得用起来也麻烦,先收藏了。一会改代码去
这个验证有有些小问题 请移步—> https://github.com/ElemeFE/element/issues/3326
@xiongsongsong 你这个最外层的el-form如何写的?pattern验证不起作用呢
@hamburgduo
<el-form :rules="stockRule" ref="stock" :model="stock" :inline="true" :label-position="'right'"
v-loading="dialogLoading"
label-width="85px">
@xiongsongsong 能否发一下整个vue文件的源码?
stockRule的规则: @hamburgduo
//效验规则
//效验规则
stockRule: {
gs: [{
required: true,
message: '请选择归属'
}],
supplier: [{
required: true,
message: '请选择供货单位'
}],
category: [{
required: true,
message: '请选择入库类型'
}],
inTime: [{
validator(rule, value, callback){
if (moment(value).isValid()) {
callback()
} else {
callback(new Error('请设置入库时间'))
}
}
}],
medicine: {required: true, message: '名称不能为空', trigger: 'blur,change'},
batchNumber: {required: true, message: '批号不能为空', trigger: 'blur,change'},
produced: {type: 'object', required: true, message: '选择生产日期', trigger: 'change'},
expired: {type: 'object', required: true, message: '选择失效日期', trigger: 'change'},
purchasePrice: {
type: 'number',
required: true,
min: 0.0001,
message: '价格必须填写',
trigger: 'change'
},
count: {type: 'number', min: 0, required: true, message: '价格必须填写', trigger: 'change'}
},
@xiongsongsong
validator(rule, value, callback){
if (moment(value).isValid()) {
callback()
} else {
callback(new Error('请设置入库时间'))
}
}
这个moment是验证库吗? 可以发一下这个库的仓库地址吗? 谢谢
@dengshenkk moment不是验证库,是一款专门处理时间的库。https://github.com/moment/moment
是的,目前必须使用form-item 行内校验时,如果对form-item 用自定义的prop,且这个prop不是form绑定的对象的属性,目前试后发现是无效的,请教一下如果进行自定义的行内校验,我的demo form-item 是这样的
这里的porp list.id会在form-item有值里绑定上,但发现无效,请求支援
@baiyaaaaa
还是说prop 属性名,必须要跟 el-form 的 model 对应
遇到类似问题的朋友可以参考 一下这篇文章:https://segmentfault.com/a/1190000014366951