一、實現效果
1、當 input 輸入框不符合要求且在 input 失焦時顯示提示詞,符合要求隱藏提示詞



2、實現 input 組件基本功能
二、組件實現代碼
1、HTML
<template> <div class="labelInput"> <span class="title">{{title}}</span> <input type="text" :value="currentValue" @input="inputload" :minlength="minLength" :maxlength="maxLength" :placeholder="placeHolder" @blur="blur" class="input"> <span v-show="showHint" class="hint">{{hint}}</span> </div> </template>
2、js
<script>
export default {
props: {
title: {
type: String,
default: '標題'
},
maxLength: {
type: Number,
default: 30
},
minLength: {
type: Number,
default: 1
},
hint: {
type: String,
default: `提示內容`
},
placeHolder: {
type: String,
default: `標題`
},
value: { // 父組件傳來的 input 值
type: [String, Number],
default: ''
}
},
data () {
return {
currentValue: this.value, // 將父組件傳的 input 值與子組件 input 的值綁定
showHint: true // 是否顯示 提示文字
}
},
watch: {
value (newVal) { // value 改變設置 currentValue 的值 (雙向綁定 父 => 子)
this.setCurrentValue(newVal)
}
},
methods: {
setCurrentValue (newVal) { // 設置當前值
if (newVal === this.currentValue) {
return
}
this.currentValue = newVal
},
inputload (e) { // input 值改變觸發
let value = e.target.value
this.$emit('input', value) // 派發事件,最新的值作為參數 這里的事件名 input 可以隨便命名,v-model 最后還是會默認取 input 事件 (雙向綁定 子 => 父)
},
blur () { // input 失焦校驗 currentValue
if (this.currentValue.length > this.maxLength || this.currentValue.length < this.minLength) {
this.showHint = true
} else {
this.showHint = false
}
}
}
}
</script>
3、css
<style lang="stylus" scoped> .labelInput width 100% height 60px box-sizing border-box padding 5px 0 position relative .title color #BFBFBF font-size 13px .input width 100% height 34px border none border-bottom 1px solid #c3cad7 box-sizing border-box color #4d6b8a font-size 14px &:focus outline none border-bottom 2px solid #439ad9 .hint font-size 13px color #3598dc position absolute display block </style>
三、使用
<hint-input v-model="weiboTitle"
hint="文章標題,11到30個字內"
:minLength="11"
class="weibo-title"></hint-input>
