搜尋
首頁web前端Vue.js修飾符v-model與.sync有什麼不同?差異對比淺析

修飾符v-model與.sync有什麼不同?以下這篇文章跟大家聊聊v-model與.sync修飾符的差異,希望對大家有幫助!

修飾符v-model與.sync有什麼不同?差異對比淺析

在日常開發的過程中,v-model指令是常用到的,一般來說v-model指令在表單及元素上建立雙向資料綁定,但v-model本質上是語法糖。提到語法糖這裡就不得不提到另一個與v-model有相似功能的雙向綁定語法糖了,那就是.sync修飾符。這裡對兩者進行一下總結:

一、v-model

#1. 作用

#相信過使用過vue框架的朋友對這個指令不會感到陌生,v-model是用來進行<input><textarea> </textarea><select></select>元素上資料的雙向綁定的。 (學習影片分享:vue影片教學

 例如:

<template>
    <div >
        <input v-model="value" type="text"/>    //这里的v-model里面的value可以直接获取到用户的输入值
    </div>
</template>

<script>

export default {
    components: {},
    data() {
        return {
            value:"",    //这里定义的value变量可以直接将上面获取到的值进行操作
        };
      }, 
    }
</script>
<style  scoped>

</style>

當我們在input框裡輸入了某個值的時候,下面data裡的value就可以直接後去到我們輸入的值,而不需要操作dom元素來取得。

1. 本質

v-model本質上來說是一個語法糖,我們習慣性的寫法是這樣的:

 <input v-model="value" type="text"/>

但是實際上完整的寫法是這樣的:

<input :value="value" @input="value=$event.target.value" type="text" />

透過對比語法糖和原始寫法可以得出: 再給<input>元素加入v-model屬性時,預設會把value當作元素的屬性,然後把input事件當作即時傳遞value的觸發事件。

注意:不是所有能進行雙向資料綁定的元素都是input事件!

3、特殊用法

#在一般情況下,我們使用v-model主要是用於資料的雙向綁定,可以十分方便的取得到使用者輸入的值,但在某些特殊情況下,我們也可以將v-model用於父子元件之間資料的雙向綁定。

<template>
    <div class="father">
        <Son v-model="str"/>
    </div>
</template>

<script>

import Son from &#39;@/components/Son.vue&#39;;    //引入子组件

export default {
    components: {Son},
    data() {
        return {
            str:"father"
        };
      },
    }
</script>

這裡定義了一個father元件和son元件,並且將son元件引入father元件中,給son元件綁定了v-model進行了傳值。此時我們需要在son元件中接收並使用這個值:

<template>
    <div class="son">
        我是在son组件里接收到的值:{{value}}
    </div>
</template>
<script>
export default {
    components: {},
    props:{
        value:{
            type:String,
        },
      },
    }
</script>

注意:這裡接受的值必須是value,寫成其他名字將會報錯!

父元件向子元件傳值,子元件中是無法直接修修改資料的,直接修改的話就會報錯

修飾符v-model與.sync有什麼不同?差異對比淺析

當我們需要修改這個值時,就需要再將其傳入到父元件中修改。

這就需要在父元件中的子元件上定義一個自訂事件,透過子元件$emit('自訂事件名稱','值')的方法將值傳入父組件。

但是在這裡我們不能使用自訂事件,因為我們用的是v-model傳值,所以我們只能使用input事件來修改。

子元件中使用$emit()方法.呼叫父元件中的事件,並且進行傳值

<template>
    <div class="son">
        我是在son组件里接收到的值:{{value}}
        <button @click="handleClick">click</button>
    </div>
</template>

<script>
export default {
    components: {},
    data() {
        return {
            str:&#39;son&#39;
        };
    },
    props:{
        value:{
            type:String,
        },
    },
    methods: {
        handleClick(){
            this.$emit(&#39;input&#39;,this.str)
        }
    },
    }
</script>

這樣就完成父子元件之間的資料雙向綁定效果

二、.sync修飾符

#1、作用

##.sync修飾符可以實現父子元件之間的雙向綁定,並且可以實現子元件同步修改父組件的值,相比較與

v-model來說,sync修飾符就簡單很多了:

2、本質

    //正常父传子
    <Son :a="num" />
    
    //加上sync之后的父传子
    <Son :a.sync="num" />
    
    //它等价于
    <Son :a="num" @update:a="val=>a=val" />
    
    //相当于多了一个事件监听,事件名是update:a,
    //回调函数中,会把接收到的值赋值给属性绑定的数据项中。

這裡面的傳值與接收和正常的父元件向子元件傳值沒有差別,唯一的差別在於子元件往回傳值的時候$emit所呼叫的事件名稱必須是

update:屬性名稱,事件名稱寫錯不會報錯,但那時也不會有任何改變,這點需要注意。

總結

v-model與.sync: 相同點:都是語法糖,都可以實作父子元件中的資料通訊。

不同點:格式不同,v-model="num"          :num.sync="num"

v-model:@input value                

##還有就是,

v-model

只能使用一次,.sync可以使用多個。 【相關影片教學推薦:

vuejs入門教學

web前端入門

以上是修飾符v-model與.sync有什麼不同?差異對比淺析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
Vue常见面试题汇总(附答案解析)Vue常见面试题汇总(附答案解析)Apr 08, 2021 pm 07:54 PM

本篇文章给大家分享一些Vue面试题(附答案解析)。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

5 款适合国内使用的 Vue 移动端 UI 组件库5 款适合国内使用的 Vue 移动端 UI 组件库May 05, 2022 pm 09:11 PM

本篇文章给大家分享5 款适合国内使用的 Vue 移动端 UI 组件库,希望对大家有所帮助!

Vue中如何使用v-model.number实现输入框的数据类型转换Vue中如何使用v-model.number实现输入框的数据类型转换Jun 11, 2023 am 08:54 AM

在Vue中,v-model是用来实现双向绑定的一个重要指令,它可以让我们很方便地将用户输入的内容同步到Vue的data属性中。但是在一些情况下,我们需要对数据进行转换,比如将用户输入的字符串类型转换成数字类型,这时候就需要使用v-model的.number修饰符来实现。v-model.number的基本用法v-model.number是v-model的一个修

聊聊vue指令中的修饰符,常用事件修饰符总结聊聊vue指令中的修饰符,常用事件修饰符总结May 09, 2022 am 11:07 AM

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

如何覆盖组件库样式?React和Vue项目的解决方法浅析如何覆盖组件库样式?React和Vue项目的解决方法浅析May 16, 2022 am 11:15 AM

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

通过9个Vue3 组件库,看看聊前端的流行趋势!通过9个Vue3 组件库,看看聊前端的流行趋势!May 07, 2022 am 11:31 AM

本篇文章给大家分享9个开源的 Vue3 组件库,通过它们聊聊发现的前端的流行趋势,希望对大家有所帮助!

react与vue的虚拟dom有什么区别react与vue的虚拟dom有什么区别Apr 22, 2022 am 11:11 AM

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。

VSCode插件分享:一个实时预览Vue/React组件的插件VSCode插件分享:一个实时预览Vue/React组件的插件Mar 17, 2022 pm 08:07 PM

在VSCode中开发Vue/React组件时,怎么实时预览组件?本篇文章就给大家分享一个VSCode 中实时预览Vue/React组件的插件,希望对大家有所帮助!

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版