深入解析 Vue 3 中 v-model 與表單元素的綁定機制

v-model?是 Vue 中最強大的指令之一,它簡化了表單數據雙向綁定的實現。本文將系統梳理各種 HTML 表單元素與?v-model?的綁定關系,特別是那些容易引起困惑的類型。

一、v-model?的本質

v-model?是一個語法糖,它實際上是?:value?和?@input?的組合(對于大多數元素)。在 Vue 3 中,這個機制變得更加靈活和強大。

<!-- 等價關系 -->
<input v-model="text">
<!-- 等同于 -->
<input :value="text" @input="text = $event.target.value">

二、文本輸入類元素

1. 普通文本輸入 (type="text")

綁定值value?屬性
觸發事件input?事件

<input type="text" v-model="message">
<!-- 等價于 -->
<input type="text" :value="message" @input="message = $event.target.value"
>

2. 多行文本 (textarea)

綁定值value?屬性
觸發事件input?事件

<textarea v-model="content"></textarea>

注意:<textarea>{{ content }}</textarea>?這種插值語法不會生效。

三、選擇類元素

1. 單選框 (type="radio")

這是最容易引起困惑的表單元素之一。

綁定值checked?狀態
觸發事件change?事件
特殊機制:通過比較?v-model?綁定的值和?value?屬性來決定是否選中

<input type="radio" value="yes" v-model="answer"> 是
<input type="radio" value="no" v-model="answer"> 否

等效于:?

<input type="radio" value="yes" :checked="answer==='yes'" @change="answer='yes'"> 是
<input type="radio" value="no"  :checked="answer==='no'" @change="answer='no'"> 否

?

關鍵點

  • 同一組的 radio 必須綁定相同的?v-model

  • v-model?綁定的值會與每個 radio 的?value?進行比較

  • 匹配時自動設置?checked?屬性

  • 用戶選擇時會將該 radio 的?value?賦給綁定的變量

類型轉換

  • 默認將?value?視為字符串

  • 如果需要其他類型,使用?:value?綁定:

    <input type="radio" :value="true" v-model="isAgree"> 同意

2. 復選框 (type="checkbox")

分為單個和多個兩種情況。

單個復選框:

綁定值checked?狀態
觸發事件change?事件
綁定類型:布爾值

<input type="checkbox" v-model="isChecked">
<!-- 等價于 -->
<input type="checkbox" :checked="isChecked" @change="isChecked = $event.target.checked"
>
多個復選框(數組綁定):

綁定值checked?狀態
觸發事件change?事件
綁定類型:數組

<input type="checkbox" value="vue" v-model="skills"> Vue
<input type="checkbox" value="react" v-model="skills"> React

選中時,value?會被添加到數組中,取消選中時移除。

3. 下拉選擇框 (select)

單選:

綁定值:選中的?option?的?value
觸發事件change?事件

<select v-model="selectedCity"><option value="bj">北京</option><option value="sh">上海</option>
</select>
多選(添加?multiple?屬性):

綁定值:所有選中?option?的?value?數組
觸發事件change?事件

<select v-model="selectedCities" multiple><option value="bj">北京</option><option value="sh">上海</option>
</select>

四、特殊輸入類型

1. 數字輸入 (type="number")

綁定值valueAsNumber?或?value
觸發事件input?事件
類型轉換:自動轉換為 Number 類型

<input type="number" v-model="age">

2. 范圍滑塊 (type="range")

綁定值value?屬性
觸發事件input?事件

<input type="range" v-model="volume" min="0" max="100">

3. 日期時間輸入 (type="date",?type="time"?等)

綁定值value?屬性(格式化為字符串)
觸發事件input?事件

<input type="date" v-model="birthday">

五、自定義組件的?v-model

在 Vue 3 中,自定義組件的?v-model?行為有了重大變化:

<CustomInput v-model="searchText" />
<!-- 等價于 -->
<CustomInput :modelValue="searchText"@update:modelValue="newValue => searchText = newValue"
/>

可以在組件中通過?defineProps?和?defineEmits?來處理:

// 子組件
const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])

六、最佳實踐與常見問題

  1. 類型一致性:確保?v-model?綁定的變量類型與?value?類型匹配

  2. 性能考慮:對于大型表單,考慮使用?lazy?修飾符減少更新頻率

    <input v-model.lazy="message">
  3. 修飾符

    • .number:自動將輸入轉為數字

    • .trim:自動去除首尾空格

七、總結對比表

元素類型綁定屬性觸發事件綁定值類型特殊說明
text, textareavalueinputstring-
radiocheckedchangeany比較?value?和綁定值
checkbox (單個)checkedchangeboolean-
checkbox (多個)checkedchangearray收集所有選中的?value
select (單選)valuechangeany匹配?option?的?value
select (多選)valuechangearray收集所有選中的?value
numbervalueAsNumberinputnumber自動類型轉換
rangevalueinputnumber/string-
date/timevalueinputstring使用標準格式 (YYYY-MM-DD)

理解這些綁定差異將幫助您更高效地使用 Vue 處理表單邏輯,避免常見的陷阱。特別是在處理 radio 和 checkbox 時,明確綁定機制可以節省大量調試時間。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91065.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【趙渝強老師】MySQL中的數據庫對象

MySQL數據庫中包含各自數據庫對象&#xff0c;常見的數據庫對象有&#xff1a;表、索引、視圖、事件、存儲過程和存儲函數等等。 視頻講解如下 【趙渝強老師】MySQL中的數據庫對象一、 創建與管理表 表是一種非常重要的數據庫對象&#xff0c;MySQL數據庫的數據都是存儲在表中…

Angular面試題目和答案大全

基礎概念篇1. 什么是Angular&#xff1f;它與AngularJS有什么區別&#xff1f;答案&#xff1a; Angular是由Google開發的基于TypeScript的開源Web應用框架&#xff0c;用于構建單頁應用程序&#xff08;SPA&#xff09;。Angular vs AngularJS對比&#xff1a;特性AngularJSAn…

CSS 語音參考

CSS 語音參考 概述 CSS&#xff08;層疊樣式表&#xff09;是用于描述HTML或XML文檔樣式的樣式表語言。它為網頁元素提供了一種統一的方式來定義字體、顏色、布局和其他視覺屬性。CSS語音參考旨在為開發者提供一個詳盡的指南&#xff0c;以便他們能夠更有效地使用CSS來增強網頁…

C# WPF 實現讀取文件夾中的PDF并顯示其頁數

文章目錄技術選型第一步&#xff1a;創建項目并安裝依賴庫第二步&#xff1a;定義數據模型 (Model)第三步&#xff1a;創建視圖模型 (ViewModel)第四步&#xff1a;設計用戶界面 (View)總結與解釋后記關于轉換器的錯誤工作中需要整理一些PDF格式文件&#xff0c;程序員的存在就…

設計模式(五)創建型:原型模式詳解

設計模式&#xff08;五&#xff09;創建型&#xff1a;原型模式詳解原型模式&#xff08;Prototype Pattern&#xff09;是 GoF 23 種設計模式中的創建型模式之一&#xff0c;其核心價值在于通過復制現有對象來創建新對象&#xff0c;而不是通過 new 關鍵字調用構造函數。它特…

K8S 八 數據存儲-高級存儲PV PVC 生命周期;配置存儲ConfigMap Secret

目錄數據存儲 Volume8.1 基本存儲8.1.1 EmptyDir8.1.2 HostPath 掛載目錄8.1.3 NFSnfs的服務8.2 高級存儲8.2.1 PV和PVC8.2.2 PV 持久化卷申請8.2.3 PVC 資源申請PVC的配置參數8.2.4 生命周期配置存儲8.3.1 ConfigMap8.3.2 Secret數據存儲 Volume Kubernetes的Volume支持多種類…

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現輪船檢測識別(C#代碼UI界面版)

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現輪船檢測識別&#xff08;C#代碼UI界面版&#xff09;工業相機使用YoloV8模型實現輪船檢測識別工業相機通過YoloV8模型實現輪船檢測識別的技術背景在相機SDK中獲取圖像轉換圖像的代碼分析工業相機圖像轉換Bitmap圖像格…

自習室預約小程序的設計與實現

自習室預約小程序的設計與實現現代學習環境對高效、便捷的預約系統需求日益增長。自習室預約小程序結合前沿技術棧&#xff0c;提供流暢的用戶體驗和強大的后臺管理功能&#xff0c;滿足學生、職場人士等群體的自習需求。技術架構與核心功能Vue.js 構建動態前端界面 采用 Vue.j…

Docker 實戰大綱

文章目錄Docker 實戰 – Mysql &#xff08;敬請期待……&#xff09;

從一個“詭異“的C++程序理解狀態機、防抖與系統交互

引言 在編程世界中&#xff0c;有時一個看似簡單的代碼片段可能隱藏著令人驚訝的復雜性。本文將從一個"故意設計"的C程序出發&#xff0c;深入探討其背后涉及的狀態機模式、防抖機制以及操作系統與控制臺的交互原理。通過這個案例&#xff0c;我們不僅能理解這些核心…

NAS-Bench-101: Towards Reproducible Neural Architecture Search

概述這篇題為"NAS-Bench-101: Towards Reproducible Neural Architecture Search"的論文由Chris Ying等人合作完成&#xff0c;旨在解決神經網絡架構搜索(NAS)領域面臨的重大挑戰&#xff1a;計算資源需求高和實驗難以復現的問題。論文提出了NAS-Bench-101&#xff0…

SpringBoot整合Fastexcel/EasyExcel導出Excel導出多個圖片

整個工具的代碼都在Gitee或者Github地址內 gitee&#xff1a;solomon-parent: 這個項目主要是總結了工作上遇到的問題以及學習一些框架用于整合例如:rabbitMq、reids、Mqtt、S3協議的文件服務器、mongodb、xxl-job、powerjob還有用Docker compose部署各類中間組件。如果大家有…

網絡原理--HTTPHTTPS

目錄 一、HTTP 1.1 HTTP是什么 1.2 HTTP協議的工作過程 1.3 HTTP協議格式 1.3.1 抓包工具的使用 1.3.2 抓包結果 1.4 HTTP請求 1.4.1 URL 1.4.2 認識“方法” (method) 1.4.3 認識請求“報頭”(header) 1.4.4 認識請求“正文”(body) 1.5 HTTP 響應詳解 1.5.1 HTTP…

『 C++ 入門到放棄 』- 哈希表

一、哈希的概念 哈希&#xff0c;也稱「 散列 」是一種用來進行高效查找的數據結構&#xff0c;查找的時間復雜度平均為O(1)&#xff0c;其本質就是依賴哈希函數這個算法來將 key 和該 key 存儲位置建立一個映射關系。 而因為是有著映射關系&#xff0c;所以哈希的事件復雜度為…

零售收銀系統開源代碼全解析:連鎖門店一體化解決方案(含POS+進銷存+商城)

過去10年&#xff0c;收銀系統技術經歷了從單機版到云服務、從單純結算到全渠道整合的快速演進。面對連鎖多門店、AI稱重、智能分賬、跨店庫存同步等新需求&#xff0c;很多企業的現有傳統saas系統已顯乏力。本文將梳理收銀系統關鍵技術指標&#xff0c;助您在系統升級時做出明…

能源高效利用如何實現?樓宇自控系統智能化監管建筑設備

隨著全球能源危機日益嚴峻和“雙碳”目標的持續推進&#xff0c;建筑領域作為能耗大戶&#xff08;約占社會總能耗的40%&#xff09;&#xff0c;其節能潛力備受關注。樓宇自控系統&#xff08;Building Automation System&#xff0c;簡稱BAS&#xff09;作為建筑智能化的核心…

校園二手交易小程序的設計與實現

文章目錄前言詳細視頻演示具體實現截圖后端框架SpringBoot微信小程序持久層框架MyBaits成功系統案例&#xff1a;參考代碼數據庫源碼獲取前言 博主介紹:CSDN特邀作者、985高校計算機專業畢業、現任某互聯網大廠高級全棧開發工程師、Gitee/掘金/華為云/阿里云/GitHub等平臺持續…

Redis(二):Redis高級特性和應用(慢查詢、Pipeline、事務)

Redis的慢查詢 許多存儲系統&#xff08;例如 MySQL)提供慢查詢日志幫助開發和運維人員定位系統存在的慢操作。所謂慢查詢日志就是系統在命令執行前后計算每條命令的執行時間&#xff0c;當超過預設閥值,就將這條命令的相關信息&#xff08;例如:發生時間&#xff0c;耗時&…

如何為你的WordPress網站選擇合適的安全插件

在管理WordPress網站時&#xff0c;安全因素至關重要。由于WordPress的廣泛使用&#xff0c;它也成為了黑客攻擊的首要目標。為了避免潛在的安全風險&#xff0c;選擇合適的安全插件至關重要。而Wordfence和iThemes&#xff0c;作為兩款頗具人氣的WordPress安全插件&#xff0c…

我們使用Rust開發的AI知識庫應用

這段時間陸陸續續的開發了2個AI知識庫應用&#xff0c;一個面向企業&#xff0c;一個面向C端用戶。 飛樹智庫&#xff1a;一個安全高效的面向 企業的知識庫平臺&#xff08;https://fskb.coderbox.cn/&#xff09;。 小飛樹&#xff1a;一個專注于個人知識管理的AI應用&#…