vue中v-model雙向綁定input輸入框問題
vue v-model雙向綁定input輸入框
<!-- 輸入框 -->
<input type="number" class="form-control form-control-sm ipt-num" v-model.number.lazy="number" />v-model雙向綁定數(shù)據(jù)number,用戶在輸入框中內(nèi)容之后,判斷用戶輸入的內(nèi)容,然后判斷內(nèi)容是否為正整數(shù),不是的話要進(jìn)行轉(zhuǎn)換。
- 先把輸入的值轉(zhuǎn)換為整數(shù)
- 如果輸入的值是字符串或者是 <1 的數(shù)字,則將輸入框內(nèi)容賦值為1
- 如果輸入的值是帶小數(shù)的數(shù)字,則將小數(shù)點(diǎn)之后的值去掉,只保留整數(shù),并將其賦值給輸入框
這樣的話,當(dāng)用戶輸入小數(shù)或者負(fù)數(shù)的時(shí)候,輸入框顯示的還是輸入的內(nèi)容,沒有轉(zhuǎn)換為我們想要的值。
但是vue中的number已經(jīng)自動(dòng)賦值為我們想要的數(shù)字了。

讓輸入框自動(dòng)轉(zhuǎn)換為我們想要的數(shù)值,解決方案:
在input組件中增加事件@blur="onBlur",當(dāng)輸入框失去焦點(diǎn)時(shí),把number賦值為輸入框中的值。
<!-- 輸入框 -->
<input type="number" class="form-control form-control-sm ipt-num" v-model.number.lazy="number" @blur="onBlur"/>
methods: {
onBlur(e) {
e.target.value = this.number
}
}
vue v-model雙向綁定原理kalrry
v-model實(shí)現(xiàn)雙向綁定的語法糖,常用于表單與組件之間的數(shù)據(jù)雙向綁定.
表單實(shí)現(xiàn)雙向綁定
1. 原理
分兩步驟
v-bind綁定一個(gè)value屬性v-on指令給當(dāng)前元素綁定input事件
可看出v-model綁定在表單上時(shí),v-model其實(shí)就是v-bind綁定value和v-on監(jiān)聽input事件的結(jié)合體
v-model = v-bind:value + v-on:input
2. 實(shí)現(xiàn)
用v-bind:value + v-on:input來模擬實(shí)現(xiàn)v-model
<input type="text" :value="username" @input="username = $event.target.value" />
例子解釋:
通過 v-bind:value 綁定 username 變量,每次輸入內(nèi)容的時(shí)候觸發(fā)input事件
通過事件對(duì)象參數(shù) event.target.value 獲得輸入的內(nèi)容,并且把這個(gè)內(nèi)容賦值給username
此時(shí)更改username時(shí)input輸入框會(huì)變化,更改input輸入框時(shí)username變量會(huì)變,從而實(shí)現(xiàn)了v-model的雙向綁定功能
組件上的雙向綁定
1. 原理
v-model綁定在組件上的時(shí)候做了以下步驟
- 在父組件內(nèi)給子組件標(biāo)簽添加 v-model ,其實(shí)就是給子組件綁定了 value 屬性
- 子組件內(nèi)使用 prop 創(chuàng)建 創(chuàng)建 value 屬性可以拿到父組件傳遞下來的值,名字必須是 value。
- 子組件內(nèi)部更改 value 的時(shí)候,必須通過 $emit 派發(fā)一個(gè) input 事件,并攜最新的值
- v-model 會(huì)自動(dòng)監(jiān)聽 input 事件,把接收到的最新的值同步賦值到 v-model 綁定的變量上
2. 實(shí)現(xiàn)
父組件操作
<子組件標(biāo)簽 v-model="父組件定義的變量值 />
子組件操作
<template>
?? ?<p>子組件庫(kù)存:{{ value }}</p>
?? ?<button @click="addFun">增加1</button>
</template>
<script>
?? ?export default {
?? ??? ?props:{
?? ??? ??? ?value:{
?? ??? ??? ??? ?type: Number,
?? ??? ??? ??? ?default:0
?? ??? ??? ?}
?? ??? ?},
?? ??? ?methods:{
?? ??? ??? ?addFun() {
?? ??? ??? ??? ?this.$emit('input', this.value + 1)
?? ??? ??? ?}
?? ??? ?}
?? ?}
</script>
// 這樣后每次點(diǎn)擊按鈕的時(shí)候,庫(kù)存就會(huì)加1,并且把變更后的值傳遞給父組件
// 父組件 v-model 綁定的變量就會(huì)改變3. 實(shí)例
父組件
//v-model綁定值 <el-form-item label="員工頭像"> ? ? ? ? <!-- 放置上傳圖片 --> ? ? ? ? <UploadImg v-model="userInfo.staffPhoto" /> </el-form-item> //uploadimg: 自定義的組件, v-model:雙向綁定
子組件(圖片上傳組件)
//1.定義props value來接收父組件傳入的圖片地址
?props: {
? ? // 父組件傳遞過來的v-model對(duì)應(yīng)的值
? ? value: { type: String, default: '' }
? },
//2.直接用value來顯示圖片
<img :src="value" />
//3.在子組件圖片上傳成功之后,this.$emit(‘input', 新地址), 拋給父組件,達(dá)到更新父組件中v-model綁定數(shù)據(jù)項(xiàng)
? ?const imageUrl = `https://${data.Location}`
? ?this.$emit('input', imageUrl)總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue項(xiàng)目移動(dòng)端實(shí)現(xiàn)ip輸入框問題
- 對(duì)vue中的input輸入框進(jìn)行郵箱驗(yàn)證方式
- Vue輸入框狀態(tài)切換&自動(dòng)獲取輸入框焦點(diǎn)的實(shí)現(xiàn)方法
- vue3如何實(shí)現(xiàn)?6位支付密碼輸入框
- vue項(xiàng)目中input輸入框輸入不了值問題及解決
- vue Antd 輸入框Input自動(dòng)聚焦方式
- element-ui vue input輸入框自動(dòng)獲取焦點(diǎn)聚焦方式
- vue之Element-Ui輸入框顯示與隱藏方式
- Vue IP地址輸入框?qū)嵗a
相關(guān)文章
淺談vue項(xiàng)目?jī)?yōu)化之頁面的按需加載(vue+webpack)
本篇文章主要介紹了vue項(xiàng)目?jī)?yōu)化之頁面的按需加載(vue+webpack),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
詳解vue-router的Import異步加載模塊問題的解決方案
這篇文章主要介紹了詳解vue-router的Import異步加載模塊問題的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題
這篇文章主要介紹了vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue自定義指令實(shí)現(xiàn)一鍵復(fù)制功能
本文旨在記錄解決在工作中一鍵復(fù)制功能得需求,本文主要使用了Vue3+TypeScript+Ant-Design-Vue,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
vue使用element-ui tabs切換echarts解決寬度100%方式
這篇文章主要介紹了vue使用element-ui tabs切換echarts解決寬度100%方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
簡(jiǎn)單了解Vue + ElementUI后臺(tái)管理模板
這篇文章主要介紹了簡(jiǎn)單了解Vue + ElementUI后臺(tái)管理模板,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

