最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3中v-model雙向綁定的避坑指南(2026最新)

 更新時間:2026年04月03日 08:39:53   作者:前端Hardy  
這篇文章主要為大家詳細介紹了Vue3中v-model雙向綁定的正確用法和避坑指南,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

你的表單數(shù)據(jù)綁定了卻不動?自定義組件 v-model 寫了就是不生效?

而用 Vue3 正確的 v-model 寫法,一行代碼搞定雙向綁定,支持多字段同步、自定義事件、TS 完美兼容——再也不用手動寫 $emit('input').sync 修飾符!

如果你受夠了:

  • 輸入框改了值,頁面沒反應
  • 自定義組件傳值像“猜謎游戲”
  • Vue2 轉(zhuǎn) Vue3 后 v-model 突然失效
  • 團隊里有人寫 :value + @input,有人寫 v-model,代碼風格混亂

那么,這篇 2026 年最新實操指南,就是為你寫的——不用翻文檔,所有代碼模板直接復制粘貼,今天就能寫出零 bug 的雙向綁定!

一、先搞懂:Vue3 的 v-model,到底“新”在哪?

很多從 Vue2 過來的開發(fā)者,還在用老思維寫 v-model,結(jié)果頻頻翻車。

Vue3 對 v-model 做了三大升級

特性Vue2Vue3
綁定屬性固定為 value可自定義(如 title、count)
觸發(fā)事件input統(tǒng)一為 update:xxx
多綁定支持不支持一個組件可綁多個 v-model
語法糖需配合 .sync原生支持,無需額外修飾符

一句話總結(jié):Vue3 的 v-model = 更靈活 + 更統(tǒng)一 + 更少代碼。

二、核心干貨:v-model 3 大場景實戰(zhàn)(附可運行模板)

場景1:基礎(chǔ)表單綁定(覆蓋 80% 日常開發(fā))

適用于 <input>、<textarea>、<select>、復選框等。

【實操代碼】(直接復制)

<template>
  <div class="form-demo">
    <!-- 文本輸入 -->
    <input v-model="username" placeholder="賬號" />
    <!-- 密碼 -->
    <input v-model="password" type="password" placeholder="密碼" />
    <!-- 多行文本 -->
    <textarea v-model="bio" placeholder="個人簡介"></textarea>
    <!-- 復選框(布爾值) -->
    <label>
      <input type="checkbox" v-model="agree" />
      同意用戶協(xié)議
    </label>
    <!-- 實時預覽 -->
    <div class="preview">
      賬號:{{ username }}
      密碼:{{ password }}
      簡介:{{ bio }}
      已同意:{{ agree ? '?' : '?' }}
    </div>
  </div>
</template>
<script setup>
import { ref } from 'vue'
const username = ref('')
const password = ref('')
const bio = ref('')
const agree = ref(false)
</script>

避坑提醒v-model自動忽略元素上的 value、checked 屬性,不要混用!

場景2:自定義組件 v-model(組件通信必備)

讓自定義組件像原生表單一樣使用 v-model

1. 創(chuàng)建組件:MyInput.vue

<template>
  <div class="my-input">
    <span>自定義:</span>
    <input
      :value="modelValue"
      @input="$emit('update:modelValue', $event.target.value)"
      placeholder="請輸入..."
    />
  </div>
</template>
<script setup>
// 必須叫 modelValue!
const props = defineProps(['modelValue'])
// 必須 emit update:modelValue!
const emit = defineEmits(['update:modelValue'])
</script>

2. 父組件使用

<template>
  <MyInput v-model="customText" />
  <p>輸入內(nèi)容:{{ customText }}</p>
</template>

<script setup>
import { ref } from 'vue'
import MyInput from './MyInput.vue'

const customText = ref('')
</script>

效果:父組件 v-model="customText" → 子組件 modelValue 接收 → 輸入時觸發(fā) update:modelValue → 父組件自動更新!

場景3:多 v-model 綁定(復雜表單神器)

一個組件同時綁定多個雙向數(shù)據(jù),比如姓名 + 年齡 + 郵箱。

父組件

<template>
  <UserForm 
    v-model:name="user.name"
    v-model:age="user.age"
    v-model:email="user.email"
  />
  <pre>{{ user }}</pre>
</template>

<script setup>
import { reactive } from 'vue'
import UserForm from './UserForm.vue'

const user = reactive({
  name: '',
  age: 0,
  email: ''
})
</script>

子組件:UserForm.vue

<template>
  <div>
    <input v-model="nameProxy" placeholder="姓名" />
    <input v-model.number="ageProxy" type="number" placeholder="年齡" />
    <input v-model="emailProxy" type="email" placeholder="郵箱" />
  </div>
</template>

<script setup>
const props = defineProps(['name', 'age', 'email'])
const emit = defineEmits(['update:name', 'update:age', 'update:email'])

// 使用計算屬性代理,讓 v-model 在子組件內(nèi)也能用
import { computed } from 'vue'
const nameProxy = computed({
  get: () => props.name,
  set: (val) => emit('update:name', val)
})
const ageProxy = computed({
  get: () => props.age,
  set: (val) => emit('update:age', val)
})
const emailProxy = computed({
  get: () => props.email,
  set: (val) => emit('update:email', val)
})
</script>

優(yōu)勢:父組件只需寫 v-model:xxx,邏輯清晰,維護成本極低!

三、實戰(zhàn)避坑:90% 的人都會踩的 3 個致命錯誤

坑1:綁定非響應式數(shù)據(jù)

// 錯誤 
let text = '' // 普通變量
// v-model="text" → 修改無效!
// 正確 
const text = ref('') // 響應式

坑2:自定義組件命名不規(guī)范

// 錯誤(Vue2 寫法)
defineProps(['value'])
defineEmits(['input'])
// 正確(Vue3 標準)
defineProps(['modelValue'])
defineEmits(['update:modelValue'])

坑3:v-model和:value混用

<!-- 錯誤  -->
<input v-model="msg" :value="defaultValue" />
<!-- 正確  -->
<input v-model="msg" />
<!-- 或初始化時:const msg = ref(defaultValue) -->

四、進階技巧:用 TS 讓 v-model 更安全

// MyInput.vue (TypeScript 版)
<script setup lang="ts">
interface Props {
  modelValue: string
}
const props = defineProps<Props>()
const emit = defineEmits<{
  (e: 'update:modelValue', value: string): void
}>()
</script>

類型檢查 + 智能提示,杜絕拼寫錯誤!

五、誰在用 Vue3 的 v-model?

  • 字節(jié)跳動:所有內(nèi)部表單系統(tǒng)強制使用多 v-model 模式
  • 騰訊文檔:協(xié)作編輯組件通過 v-model:content 實時同步
  • Nuxt 3 官方模板:表單示例全部采用 Composition API + v-model
  • Vue 官方團隊:在 RFC 中明確表示 “v-model 是未來組件通信的核心”

結(jié)語:雙向綁定,本該如此優(yōu)雅

Vue3 的 v-model 不是“小改動”,而是對組件通信范式的重新定義

當你能用 v-model:title、v-model:count 一行搞定復雜交互,你就知道——這波升級,值了。

到此這篇關(guān)于Vue3中v-model雙向綁定的避坑指南(2026最新)的文章就介紹到這了,更多相關(guān)Vue3 v-model雙向綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue計時器的實現(xiàn)方法

    vue計時器的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了vue計時器的實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • elementui?Select選擇器嵌套tree實現(xiàn)TreeSelect方式

    elementui?Select選擇器嵌套tree實現(xiàn)TreeSelect方式

    這篇文章主要介紹了elementui?Select選擇器嵌套tree實現(xiàn)TreeSelect方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue3動態(tài)倒計時的代碼實現(xiàn)

    Vue3動態(tài)倒計時的代碼實現(xiàn)

    在使用Vue框架開發(fā)Web應用時,倒計時功能是一個常見的需求,它可以在一定時間內(nèi)重復執(zhí)行某些操作,比如防止用戶重復提交表單、限制投票次數(shù)、實現(xiàn)驗證碼獲取等功能,所以本文給大家介紹了Vue3動態(tài)倒計時的代碼實現(xiàn),需要的朋友可以參考下
    2024-09-09
  • vue3+springboot部署到Windows服務器的詳細步驟

    vue3+springboot部署到Windows服務器的詳細步驟

    這篇文章主要介紹了vue3+springboot部署到Windows服務器,配置Nginx時,因為現(xiàn)在是把vue前端交給了Nginx代理,所以這里的端口號不一定是我們在vue項目中設(shè)置的端口號,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2022-10-10
  • vue2.0項目中使用Ueditor富文本編輯器示例代碼

    vue2.0項目中使用Ueditor富文本編輯器示例代碼

    本篇文章主要介紹了vue2.0項目中使用Ueditor富文本編輯器示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • Vuejs實現(xiàn)購物車功能

    Vuejs實現(xiàn)購物車功能

    這篇文章主要為大家詳細介紹了Vuejs實現(xiàn)購物車功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Vue冷門技巧遞歸組件實踐示例詳解

    Vue冷門技巧遞歸組件實踐示例詳解

    這篇文章主要為大家介紹了Vue冷門技巧遞歸組件實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • vue3中批量全局注冊組件實例詳解

    vue3中批量全局注冊組件實例詳解

    在vue中,我們在main.ts引入的全局注冊的組件是可以不需要import導入而直接使用的,使用的時候是自己全局注冊組件時的名稱,而不是組件名,這篇文章主要介紹了vue3中批量全局注冊組件,需要的朋友可以參考下
    2023-05-05
  • vue-element-admin 全局loading加載等待

    vue-element-admin 全局loading加載等待

    本文主要介紹了vue-element-admin 全局loading加載等待,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue實現(xiàn)全匹配搜索列表內(nèi)容

    vue實現(xiàn)全匹配搜索列表內(nèi)容

    這篇文章主要為大家詳細介紹了vue實現(xiàn)全匹配搜索列表內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

新干县| 双辽市| 吉安县| 扶风县| 淄博市| 新宁县| 喀什市| 资兴市| 开原市| 西峡县| 繁昌县| 太湖县| 黄浦区| 元氏县| 长白| 察隅县| 台东县| 磐石市| 于都县| 象山县| 台湾省| 柳州市| 桂东县| 方山县| 南部县| 余姚市| 广丰县| 连南| 武城县| 吉木萨尔县| 杭州市| 泌阳县| 西乌| 乌什县| 靖江市| 湛江市| 库尔勒市| 东兰县| 大兴区| 胶南市| 元氏县|