element-ui input-textarea 提示自定义改造

 element-ui input-textarea组件官方地址Element - The world's most popular Vue UI framework

 

该组件,运用在现实场景中依旧不满足甲方的胃口。

改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀~改呀!

1.展示个数,

2.到达最大个数不可输入,

3.继续输入时提示最大字数

效果展示:

完整代码实现

<template>
<div>
  <el-input
    :type="typeInput?'':'textarea'"
    :placeholder="placeholderData"
    v-model="text"
    v-on:input="inputChange"
  >
  </el-input>
  <span class="el-input__suffix">
            <span class="el-input__suffix-inner">
                <span class="el-input__count">
                    <span class="el-input__count-inner" :style="typeInput?'':'margin-top: 100%;'">
                        {{text===null?0:text.length}}/{{maxlength}}
                    </span>
                </span>
            </span>
        </span>
  <span v-show="showSpan" class="spanClass">{{placeholderData}}</span>
</div>
</template>

<script>
export default {
  props:{
    typeInput:{
      type:Boolean
    },
    valueData:{
      type:String,
      default:''
    },
    placeholderData:{
      type:String
    },
    maxlength:{
      type: Number
    }
  },
  data() {
    return {
      text: '',
      showSpan:false
    }
  },
  mounted() {
    this.$nextTick(() => {
      let obj;
      if(this.valueData){
        obj={
          data:this.valueData
        }
      }else {
        obj={
          data:''
        }
      }
      this.text=JSON.parse(JSON.stringify(obj)).data
      this.$forceUpdate()
    })

  },
  watch:{
    valueData: {
      handler (newValue, oldValue) {
        let obj ={
          data:newValue
        }
        this.text=JSON.parse(JSON.stringify(obj)).data
        this.$forceUpdate()
      },
      deep: true
    }
  },
  methods:{
    inputChange(val) {
      if(val.length>this.maxlength){
        this.text=val.slice(0,this.maxlength)
        this.showSpan=true
      }else {
        this.showSpan=false
      }
      this.$emit('inputData',this.text)
    }
  }
}
</script>

<style scoped>
.spanClass {
  color: #F56C6C;
  font-size: 12px;
  line-height: 1;
  padding-top: 4px;
  position: absolute;
  top: 100%;
  left: 0;
}
.inputWord /deep/{
  position: relative;
.el-input__inner{
  padding-right: 80px;
}
}
.el-input__suffix{
  position: absolute;
  height: 100%;
  right: 5px;
  top: 0;
  text-align: center;
  color: #c0c4cc;
  transition: all .3s;
  pointer-events: none;
}
.el-input__count { background-color: transparent;
  bottom: 37px;
  height: 100%;

  align-items: center;
  color: #909399;
  font-size: 12px;
}
.el-input__count-inner {
  margin-right: 10%;
  background: #fff;
  line-height: normal;
  display: inline-block;
}

</style>

 代码引用

<els-textarea  :typeInput="false"  :valueData="data" @inputData="data=$event"  :maxlength="200" :placeholderData="'数据(内容200字以内)'"></els-textarea>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值