vue3表單輸入綁定方式
初識(shí)表單輸入綁定
vue3可以幫助我們將vue定義的變量綁定到html表單元素上,并且監(jiān)聽到html表單元素修改值時(shí),會(huì)將對(duì)應(yīng)的vue定義的變量修改。
<!-- 將vue3定義的text綁定給inut元素, 當(dāng)input元素發(fā)生input輸入事件時(shí), 將修改vue3定義的text --> <input :value="text" @input="event => text = event.target.value">
v-model 指令幫我們簡(jiǎn)化了這一步驟(與上面完全一樣的效果):
<input v-model="text">
v-model 還可以用于各種不同類型的輸入
- 文本類型的 <input> 和 <textarea> 元素會(huì)綁定 value property 并偵聽 input 事件;
- <input type=“checkbox”> 和 <input type=“radio”> 會(huì)綁定 checked property 并偵聽 change 事件;
- <select> 會(huì)綁定 value property 并偵聽 change 事件。
注意:v-model 會(huì)忽略任何表單元素上初始的 value、checked 或 selected attribute。它將始終將當(dāng)前綁定的 JavaScript 狀態(tài)視為數(shù)據(jù)的正確來源。
這些html原生的表單元素 和 v-model之間 實(shí)現(xiàn)了,把vue定義的響應(yīng)式變量綁定給了表單元素的值,同時(shí),通過監(jiān)聽對(duì)應(yīng)表單的對(duì)應(yīng)事件(為了監(jiān)測(cè)到修改的值),獲取到修改后的值,把值更新到vue定義的響應(yīng)式變量中,這樣就實(shí)現(xiàn)了雙向綁定。自定義組件如果要支持v-model,那么也需要這樣去做這2部分
基本用法
input

<div class="main-box">
<p>Message is: {{ msg }}</p>
<input v-model="msg" placeholder="edit me" />
</div>
<script setup>
import { ref,reactive } from 'vue'
let msg = ref('a')
</script>textarea

注意:要加上下面的樣式,才有換行效果哦
<div class="main-box">
<p style="white-space: pre-line;">{{ msg }}</p>
<textarea v-model="msg"></textarea>
</div>
<script setup>
import { ref,reactive } from 'vue'
let msg = ref('a')
</script>checkbox
單個(gè)復(fù)選框

單個(gè)的復(fù)選框,綁定的是布爾類型值
<div class="main-box">
<input type="checkbox" id="checkbox" v-model="checked" />
<label for="checkbox">{{ checked }}</label>
</div>
<script setup>
import { ref,reactive } from 'vue'
let checked = ref(true)
</script>多個(gè)復(fù)選框

多個(gè)復(fù)選框綁定的是同一個(gè)數(shù)組或集合的值
<div class="main-box">
<div>Checked names: {{ checkedNames }}</div>
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
</div>
<script setup>
import { ref,reactive } from 'vue'
let checkedNames = ref(['Mike'])
</script>radio

<div class="main-box">
<div>Picked: {{ picked }}</div>
<input type="radio" id="one" value="One" v-model="picked" />
<label for="one">One</label>
<input type="radio" id="two" value="Two" v-model="picked" />
<label for="two">Two</label>
</div>
<script setup>
import { ref,reactive } from 'vue'
let picked = ref('Two')
</script>select
單選

option中里面沒有value值,但還是默認(rèn)選擇了B
<div class="main-box">
<div>Selected: {{ selected }}</div>
<select v-model="selected">
<option disabled value="">Please select one</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
</div>
<script setup>
import { ref,reactive } from 'vue'
let selected = ref('B')
</script>多選

<div class="main-box">
<div>Selected: {{ selected }}</div>
<select v-model="selected" multiple>
<option v-for="option in options"
:value="option.value"
:key="option.value">
{{ option.text }}
</option>
</select>
</div>
<script setup>
import { ref, reactive } from 'vue'
let selected = ref('A')
let options = ref([
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' }
])
</script>值綁定
通過以上基本用法,我們發(fā)現(xiàn):對(duì)于單選按鈕,復(fù)選框和選擇器選項(xiàng),v-model 綁定的值通常是靜態(tài)的字符串 (或者對(duì)復(fù)選框是布爾值),但有的時(shí)候,我們希望表單元素綁定的值是組件實(shí)例上的動(dòng)態(tài)數(shù)據(jù)。
這可以通過使用 v-bind 來實(shí)現(xiàn)。
此外,使用 v-bind 還使我們可以將選項(xiàng)值綁定為非字符串的數(shù)據(jù)類型。
復(fù)選框

單個(gè)復(fù)選框默認(rèn)綁定的是布爾值,可以通過vue特有的 attributes,來綁定值。
甚至可以使用v-bind綁定組件實(shí)例身上的動(dòng)態(tài)的值
<div class="main-box">
<input type="checkbox"
v-model="toggle"
true-value="yes"
:false-value="no" />
{{toggle}}
</div>
<script setup>
import { ref, reactive } from 'vue'
let no = ref('nonono~')
</script>單選框

<div class="main-box">
<p>{{ pick }}</p>
<input type="radio" v-model="pick" :value="first" />1
<input type="radio" v-model="pick" :value="second" />2
</div>
<script setup>
import { ref, reactive } from 'vue'
let first = ref('第一')
let second = ref('第二')
let pick = ref('')
</script>選擇器

<div class="main-box">
<p>{{ selected }}</p>
<select v-model="selected">
<!-- 綁定 內(nèi)聯(lián)對(duì)象字面量 -->
<option :value="{ number: 123 }">123</option>
</select>
</div>
<script setup>
import { ref, reactive } from 'vue'
let selected = ref()
</script>修飾符
.lazy

當(dāng)輸入完,并且input焦點(diǎn)時(shí),即觸發(fā)了change事件,然后msg才會(huì)修改。
而不是原來的:邊輸入,它會(huì)實(shí)時(shí)的邊改
<div class="main-box">
<p>{{ msg }}</p>
<!-- 在 "change" 事件后同步更新而不是 "input" -->
<input v-model.lazy="msg" />
</div>
<script setup>
import { ref, reactive } from 'vue'
let msg = ref()
</script>.number
如果你想讓用戶輸入自動(dòng)轉(zhuǎn)換為數(shù)字,可以在 v-model 后添加
.number 修飾符來管理輸入number 修飾符會(huì)在輸入框有 type=“number” 時(shí)自動(dòng)啟用
<div class="main-box">
<input v-model.number="age" />
</div>
<script setup>
import { ref, reactive } from 'vue'
let age = ref()
</script>.trim
如果想要默認(rèn)自動(dòng)去除用戶輸入內(nèi)容中兩端的空格,可以在 v-model 后添加 .trim 修飾符
<div class="main-box">
<input v-model.trim="msg" />
</div>
<script setup>
import { ref, reactive } from 'vue'
let msg= ref()
</script>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
VUE3項(xiàng)目VITE打包優(yōu)化的實(shí)現(xiàn)
本文主要介紹了VUE3項(xiàng)目VITE打包優(yōu)化的實(shí)現(xiàn),包括使用視圖分析工具、路由懶加載、第三方庫(kù)CDN引入、gzip壓縮、按需引入第三方庫(kù)、TreeShaking、剔除console和debugger、分包策略和圖片壓縮等,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
一篇文章帶你使用Typescript封裝一個(gè)Vue組件(簡(jiǎn)單易懂)
這篇文章主要介紹了使用Typescript封裝一個(gè)Vue組件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Vue數(shù)據(jù)增刪改查與表單驗(yàn)證的實(shí)現(xiàn)流程介紹
這篇文章主要介紹了Vue數(shù)據(jù)增刪改查與表單驗(yàn)證的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-10-10
vue框架下部署上線后刷新報(bào)404問題的解決方案(推薦)
這篇文章主要介紹了vue框架下部署上線后刷新報(bào)404問題解決方案,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
Vue 前端實(shí)現(xiàn)登陸攔截及axios 攔截器的使用
這篇文章主要介紹了Vue 前端實(shí)現(xiàn)登陸攔截及axios 攔截器的使用,通過這個(gè)項(xiàng)目學(xué)習(xí)如何實(shí)現(xiàn)一個(gè)前端項(xiàng)目中所需要的 登錄及攔截、登出、token失效的攔截及對(duì)應(yīng) axios 攔截器的使用。需要的朋友可以參考下2019-07-07
VUE.CLI4.0配置多頁(yè)面入口的實(shí)現(xiàn)
這篇文章主要介紹了VUE.CLI4.0配置多頁(yè)面入口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Element UI 上傳組件實(shí)現(xiàn)文件上傳并附帶額外參數(shù)功能
在使用 ElementUI 的上傳組件 el-upload 實(shí)現(xiàn)文件上傳功能時(shí),如果單文件上傳是比較簡(jiǎn)單的,但是在實(shí)際需求中,往往會(huì)在上傳文件時(shí)伴隨著一些其他參數(shù),怎么操作呢,下面通過示例代碼講解感興趣的朋友一起看看吧2023-08-08
打包組件報(bào)錯(cuò):Error:Cannot?find?module?'vue/compiler-sfc&ap
最近遇到這樣的問題,vue組件庫(kù)搭建過程中使用webpack打包組件時(shí)報(bào)錯(cuò),本文給大家分享打包組件報(bào)錯(cuò):Error:?Cannot?find?module?‘vue/compiler-sfc‘的解決方法,感興趣的朋友一起看看吧2023-12-12

