想显示的样式:
- 前缀_div框_后缀
前缀值data:
businessPrefixE:'inc_',//前缀
suffixE:'_flag'//后缀
ant-design-vue中设置a-input的前缀和后缀,因为ant-design中的a-input前缀参数不能自动追加_来拼接,那我们就传值的时候自己加_。
<a-form-item
label="英文名"
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
>
<a-input
:addon-before="businessPrefixE"
:addon-after="suffixE"
class="testinput"
@change="changeEname"
v-decorator="[
'ename',
{rules: [{required: true,message: '请输入英文名!'}]}]"/>
</a-form-item>
自定义词根校验组件设置前缀后缀:自定义组件我开发的时候只考虑了传入前缀,组件内部如果传入了前缀就自动给它拼个_来连接,这里是与a-input的差别所在。
因为两者公用的一个前缀,那么传到自定义组件内部的前缀值就需要在传入之前把最后一个_去掉,否则就会显示成了'前缀__',显示成了两个下划线。
- 使用replace替换,会把第一个给替换掉,如果前缀只有一个就没问题
:rootPre='businessPrefixE.replace("_","")'
// 例如: inc_ ==> inc
- 但如果包含了多个下划线,就会显示错误
//例如: inc_accept_ ==> incaccept_
//实际想要的应该是:inc_accept_ ==> inc_accept
解决1:replace使用正则,把最后一个匹配到的_给替换为空
:rootPre='businessPrefixE.replace(/(.*)_/,"$1")'
- 说明:
参数1:正则表达式,要匹配什么字符,/(.*)+这里写要匹配的字符/
,代表最后一个匹配到的
字符。注:如果参数1是个普通字符串
,那它就取到的是第一个匹配到的
字符。
参数2:要替换成什么字符,"$1+要替换成什么字符"
,如果要替换成空(去掉的意思,不是替换成空格)
就写成"$1"
什么也不用加。如果写成"$1 "
,就会替换成一个空格。
<div class="ant-row ant-form-item">
<div class="ant-col ant-form-item-label" :class="formItemLayout.labelCol?'ant-col-'+formItemLayout.labelCol.span:''">
<label for="ename" title="英文名" class="ant-form-item-required">英文名</label>
</div>
<div class="ant-col ant-form-item-control-wrapper" :class="formItemLayout.wrapperCol?'ant-col-'+formItemLayout.wrapperCol.span:''">
<div class="ant-form-item-control">
<!-- :rootPre='businessPrefixE.replace("_","")' -->
<SimpleLabelHelper ref="labelHelper"
:isGlobal='isGlobal'
:globalNewRoots='globalNewRoots'
:rootPre='businessPrefixE.replace(/(.*)_/,"$1")'
:rootAft='suffixE.replace("_","")'
:text="ename"
:dataFieldId="valueData.dataFieldId"
:allLabelRoots='allLabelRoots'
@callback='getInnerCall'
@refresh='refresh'>
</SimpleLabelHelper>
</div>
</div>
</div>
解决2:就是字符串截取,去掉最后一位
let pre = 'inc_accept_';
let pre2 = pre.slice(0, pre.length-1);
最好判断下最后一位是_才截取
let pre3 = pre.slice(pre.length-1)=='_'?pre.slice(0, pre.length-1):pre;
网友评论