zoukankan      html  css  js  c++  java
  • vue element el-input 输入框当内容长度超出时显示el-tooltip提示

    参考资料:https://blog.csdn.net/qq_40190624/article/details/105730596

    基于el-input与el-tooltip进行二次封装,当el-input 输入框当内容长度超出时显示el-tooltip提示,支持所有el-input的配置与事件。效果如图:

    输入内容长度未超过输入框

    输入内容长度超过输入框

    组件代码如下(ts写法)

     1 <template>
     2     <el-tooltip effect="light" :content="value" :disabled="!isTip" ref="tip">
     3         <!-- v-bind="$attrs" v-on="$listeners"这样写只要组件没有拦截配置和事件,父组件中可以直接配置el-input -->
     4         <el-input
     5             ref="input"
     6             v-model="inputValue"
     7             v-bind="$attrs"
     8             v-on="$listeners"
     9             @input="onInput"
    10         ></el-input>
    11     </el-tooltip>
    12 </template>
    13 <script lang="ts">
    14 import { Component, Vue, Model, Emit, Watch } from "vue-property-decorator";
    15 /**
    16  *
    17  * el-input组件增强,当文字内容过长超过输入框宽度时,移动上去会浮动显示输入内容
    18  *
    19  * 用法和el-input一样
    20  *
    21  */
    22 @Component({
    23     name: "ZbTipInput"
    24 })
    25 export default class ZbTipInput extends Vue {
    26     // 输入框值
    27     inputValue: String = "";
    28     // 是否显示tip
    29     isTip: boolean = false;
    30     // 是否初始化
    31     isInit: boolean = true;
    32     // v-model绑定值
    33     @Model("change", { type: String }) value!: String;
    34     @Emit("change") setValue() {}
    35     // 抛出input事件
    36     @Emit("input") input() {}
    37     // 监听v-model绑定值
    38     @Watch("value")
    39     updateValue(v: string) {
    40         const me = this as any;
    41         // 设值输入框的值
    42         me.inputValue = v;
    43         // 视图绘制完处理逻辑
    44         me.$nextTick(() => {
    45             const input = me.$refs.input.getInput(),
    46                 // 判断输入框文字内容是否超过输入框宽度
    47                 isTip = input.offsetWidth < input.scrollWidth;
    48             // 标识是否显示tip
    49             me.isTip = isTip;
    50             if (isTip) {
    51                 if (!me.isInit) {
    52                     // 如果文字内容超长,并且不是初始化状态
    53                     // 显示tip提示
    54                     const tip = me.$refs.tip;
    55                     // 执行这个方法后tip提示才能实时显示
    56                     tip.updatePopper();
    57                     // 显示tip
    58                     tip.show();
    59                 } else {
    60                     // 标识初始化完毕
    61                     me.isInit = false;
    62                 }
    63             }
    64         });
    65     }
    66     // 输入内容改变时
    67     onInput(v: string) {
    68         const me = this as any;
    69         // 更新v-model绑定值
    70         me.setValue(v);
    71         // 组件拦截了el-input的input事件,这里手动抛出同样的事件,未验证
    72         me.input(v);
    73     }
    74 }
    75 </script>

    使用

    1                 <zb-tip-input
    2                     v-model="formData.enterpriseMailbox"
    3                     placeholder="请输入企业邮箱"
    4                     clearable
    5                     maxlength="40"
    6                 ></zb-tip-input>
  • 相关阅读:
    理解vertical-align
    理解css行高(line-height)
    react 生命周期函数
    react Diff 算法
    React中的虚拟DOM
    无限重启:windows更新之后,在输入密码页面无限重启进入不了系统
    [转]github 上传project代码
    【转】HTTP响应状态码参考簿
    TweenMax—ScrambleText插件 实现类似电脑破译密码的特效
    既然CPU一次只能执行一个线程,那多线程存在的意义是什么?
  • 原文地址:https://www.cnblogs.com/mlzs/p/13515977.html
Copyright © 2011-2022 走看看