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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM