基于vue封裝一個(gè)帶眼睛的密碼子組件

眼睛的icon使用的是阿里的圖標(biāo)庫(kù)https://www.iconfont.cn/
【思路分析】:
首先這個(gè)密碼組件是input+icon完成的(也可以是img但是我很懶,不想寫css)
對(duì)于input來(lái)說(shuō):要做2件事情
眼睛睜開:type是text,眼睛閉上:type是password
給父組件提交用戶輸入的值
對(duì)于圖標(biāo)來(lái)說(shuō):要做2件事
可以點(diǎn)擊
保證 密碼-閉眼 文本-睜眼 這個(gè)效果
【核心代碼】:
flagType綁定動(dòng)態(tài)的值 data中的flagType:'password',:class="[flag ? 'iconfont icon-yanjing_yincang_o': 'iconfont icon-yanjing_xianshi_o']"動(dòng)態(tài)樣式toShowPassword函數(shù),眼睛的點(diǎn)擊事件
<el-input
v-model="value"
:type="flagType"
ref="password"
@input="emitInput"
>
<i
slot="suffix"
class="el-input__icon eye-wrapper"
:class="[flag ? 'iconfont icon-yanjing_yincang_o': 'iconfont icon-yanjing_xianshi_o']"
@click="toShowPassword">
</i>
</el-input>【script代碼】:
```js
data() {
return {
value: '',
flag: true,
flagType: 'password',
}
},
```
```js
methods: {
toShowPassword() {
this.flag = !this.flag
this.flagType = this.flag ? 'password' : 'text'
this.$nextTick(() => {
this.$refs.password.focus()
})
},
? ? ? ?//提交數(shù)據(jù)
emitInput() {
this.$emit('input', this.value)
},
? }
```【父組件引用】:
我在父組件中設(shè)置了展示密碼的按鈕
<div style="width: 200px">
<h1>密碼組件</h1>
<toggle-passowrd v-model="form.password"></toggle-passowrd>
<el-button @click="getPassword">展示密碼</el-button>
</div>在子組件中emitInput這個(gè)方法將子組件的數(shù)據(jù)提交到了父組件,父組件通過v-model就可以拿到這個(gè)值
這里其實(shí)還涉及一個(gè)知識(shí)點(diǎn),就是v-model是怎么實(shí)現(xiàn)的?其實(shí)上面的代碼可以進(jìn)行原生的改下,請(qǐng)看下面的代碼
<toggle-passowrd v-model="form.password"></toggle-passowrd> // 原生 <toggle-passowrd @input="setPassword" :value="form.password"></toggle-passowrd>
原生需要的方法:
setPassword(val) {
this.form.password = val
},這樣知識(shí)就串聯(lián)了起來(lái),子組件通過emit將數(shù)據(jù)給了父組件,父組件通過子組件提交的input事件去取數(shù)據(jù),而vue為此,提供了一個(gè)vue的指令,就是v-model,v-model就是獲取數(shù)據(jù),并賦值數(shù)據(jù),實(shí)現(xiàn)綁定。
以上就是基于vue封裝一個(gè)帶眼睛的密碼子組件的詳細(xì)內(nèi)容,更多關(guān)于vue帶眼睛的密碼子組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue設(shè)置長(zhǎng)時(shí)間未操作登錄自動(dòng)到期返回登錄頁(yè)
這篇文章主要介紹了Vue設(shè)置長(zhǎng)時(shí)間未操作登錄以后自動(dòng)到期返回登錄頁(yè),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-01-01
element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)
在項(xiàng)目中,經(jīng)常會(huì)遇到表單檢驗(yàn),在這里我分享在實(shí)際項(xiàng)目中遇到多個(gè)表單同時(shí)進(jìn)行校驗(yàn)以及我的解決方法,感興趣的可以了解一下2021-05-05
Vue.js實(shí)現(xiàn)數(shù)據(jù)雙向綁定的代碼示例
在我們使用vue的時(shí)候,當(dāng)數(shù)據(jù)發(fā)生了改變,界面也會(huì)跟著更新,但這并不是理所當(dāng)然的,我們修改數(shù)據(jù)的時(shí)候vue是如何監(jiān)聽數(shù)據(jù)的改變以及當(dāng)數(shù)據(jù)發(fā)生改變的時(shí)候vue如何讓界面刷新的,所以本文就給大家講講Vue.js 數(shù)據(jù)雙向綁定是如何實(shí)現(xiàn)的2023-07-07
基于Vue實(shí)現(xiàn)鼠標(biāo)滾動(dòng)輪控制頁(yè)面橫向滑動(dòng)效果
這篇文章主要介紹了如何基于Vue實(shí)現(xiàn)鼠標(biāo)滾動(dòng)輪控制頁(yè)面橫向滑動(dòng)效果,文中通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-09-09
Nuxt項(xiàng)目支持eslint+pritter+typescript的實(shí)現(xiàn)
這篇文章主要介紹了Nuxt項(xiàng)目支持eslint+pritter+typescript的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-05-05
Vue項(xiàng)目部署上線全過程記錄(保姆級(jí)教程)
vue項(xiàng)目開發(fā)完畢后,我們需要將項(xiàng)目打包上線,同時(shí)我們希望可以在本地預(yù)覽生產(chǎn)環(huán)境項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目部署上線的相關(guān)資料,需要的朋友可以參考下2023-03-03
vue?url跳轉(zhuǎn)解析和參數(shù)編碼介紹
這篇文章主要介紹了vue?url跳轉(zhuǎn)解析和參數(shù)編碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

