欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3組件中v-model的使用以及深入講解

 更新時間:2021年09月26日 11:33:07   作者:Might°  
在vue2中v-model使用的還是挺多的,不過這個指令一般是用在了輸入框中,并且這個指令其實就是個語法糖,下面這篇文章主要給大家介紹了關(guān)于vue3組件中v-model的使用以及深入講解的相關(guān)資料,需要的朋友可以參考下

v-model input中使用雙向綁定數(shù)據(jù)

v-model在vue中我們經(jīng)常用它與input輸入框的輸入值進行綁定,簡單的實現(xiàn)原理大家也應(yīng)該都知道 通過v-bind綁定value值 及結(jié)合@input輸入事件動態(tài)改變綁定的value值來實現(xiàn)雙向綁定,如下vue3實現(xiàn)代碼:

<template>
   <input type="text" :value="tryText" @input="handelInput">
   <h2>{{tryText}}</h2>
</template>

<script>
import { ref} from "vue"
    export default {
        setup(){
            let tryText = ref("默認輸入值")
            function handelInput(e) {
                tryText.value = e.target.value;//ref定義的數(shù)據(jù)訪問和修改需要通過.value
            }
            return{
                tryText,
                handelInput
            }
        }
    }
</script>

相信大家經(jīng)常使用v-model在ipnut中,現(xiàn)在讓我們來看看在組件中如何使用v-model以及它的作用是啥

組件中的v-model

組件中如何使用v-model呢?我們來簡單實現(xiàn)下

父組件

<template>
  <!-- 組件綁定 v-model -->
  <hy-input v-model="message"></hy-input>
  <h2>{{message}}</h2>
</template>

<script>
import {  ref } from '@vue/reactivity'
import HyInput from "../components/HyInput.vue"
export default {
  components: {HyInput },
    setup(){
        let message = ref("嘿嘿嘿ヽ(*^ー^)(^ー^*)ノ")
        return{
            message,
        }
    }
}
</script>

子組件

<template>
   <button @click="handelClick">O(∩_∩)O哈哈~</button>
   <br>
</template>

<script>
    export default {
        props:{
            modelValue:String,
        },
        emits:['update:modelValue'],
        setup(props,context){
            function handelClick() {
                context.emit("update:modelValue","O(∩_∩)O哈哈~")
            }
        
            return{
                handelClick,
            }
        }
    }
</script>

看到這里我們可能會有點疑點 為啥要發(fā)射事件呢?為啥會有一個默認的props接收值呢?別急我們從實現(xiàn)原理上看看就懂了

這樣我們點擊子組件的按鈕就可以改變父組件中的message的數(shù)據(jù),這就是一個簡單的組件中的數(shù)據(jù)雙向綁定v-model實現(xiàn)

既然是雙向綁定,那不妨大膽猜測下是否和input中的實現(xiàn)原理相似呢?讓我們來看看它的實現(xiàn)原理

父組件

<template>
  <!-- 原理 -->
  <hy-input :modelValue="message" @update:modelValue="message = $event"></hy-input>
  <h2>{{message}}</h2>
</template>

<script>
import {  ref } from '@vue/reactivity'
import HyInput from "../components/HyInput.vue"
export default {
  components: {HyInput },
    setup(){
        let message = ref("嘿嘿嘿ヽ(*^ー^)(^ー^*)ノ")
        return{
            message,
        }
    }
}
</script>

子組件不變哦

<template>
   <button @click="handelClick">O(∩_∩)O哈哈~</button>
   <br>
</template>

<script>
    export default {
        props:{
            modelValue:String,
        },
        emits:['update:modelValue'],
        setup(props,context){
            function handelClick() {
                context.emit("update:modelValue","O(∩_∩)O哈哈~")
            }
        
            return{
                handelClick,
            }
        }
    }
</script>

通過結(jié)果我們發(fā)現(xiàn)確實可以實現(xiàn)

這樣我們就能很好理解子組件中的發(fā)射事件和默認接收值了,基本實現(xiàn)原理就是:父組件傳值給子組件,子組件通過props進行接收,但是在子組件中需要修改改數(shù)據(jù)時,我們通過發(fā)射一個事件告訴父組件,然后父組件接收傳遞過來的值進行修改。其實就是父子組件之間的通信,不過vue幫我們做了一個簡單的封裝。

ps:默認v-model綁定的數(shù)據(jù)在子組件讀取需要使用 modelValue來接收 發(fā)射事件默認叫update:modelValue ,想綁定多個值或者采用自定義名請看下面的其他寫法哦

ps:不能想通過修改props來修改數(shù)據(jù),首先這是一個特別不好的開發(fā)習(xí)慣,然后我們知道props的特性只是負責(zé)傳遞數(shù)據(jù),修改props并不能達到我們想要的效果。我們應(yīng)該通知父組件進行數(shù)據(jù)更新,這才是最好的做法。

其他寫法

如果我們子組件中的input和父組件進行雙向綁定那該怎么實現(xiàn)呢?以及需要傳遞多個雙向綁定數(shù)據(jù)呢?自定義名呢?
父組件

<template>
  <!-- 組件綁定 v-model -->
  <hy-input v-model="message" v-model:text="inputText"></hy-input>
  <h2>{{message}}</h2>
  <h2>{{inputText}}</h2>
</template>

<script>
import {  ref } from '@vue/reactivity'
import HyInput from "../components/HyInput.vue"
export default {
  components: {HyInput },
    setup(){
        let message = ref("嘿嘿嘿ヽ(*^ー^)(^ー^*)ノ")
        let inputText = ref("嘻嘻嘻嘻")
  
        return{
            message,
            inputText
        }
    }
}
</script>

子組件

<template>
   <button @click="handelClick">O(∩_∩)O哈哈~</button>
   <br>
   <input type="text" v-model="customText">
   <br>
</template>

<script>
import {computed} from "vue"
    export default {
        props:{
            modelValue:String,
            text:String
        },
        emits:['update:modelValue',"update:text"],
        setup(props,context){
            function handelClick() {
                context.emit("update:modelValue","O(∩_∩)O哈哈~")
            }
            let customText = computed({
                set(value){
                    context.emit("update:text",value)
                },
                get(){
                    return props.text
                }
            })

            return{
                handelClick,
                customText,
            }
        }
    }
</script>

多個綁定值及改名寫法 v-model:text=“inputText” 子組件中props直接是 text 發(fā)射事件名是 update:text
這里我們看到為了實現(xiàn)子組件中輸入框v-model雙向綁定父組件,我們需要借助計算屬性computed來實現(xiàn),可能有同學(xué)會想直接綁定props中的text不就可以了嗎?還是上面那句話,若只是讀取確實可以綁定,但是當你修改的時候是需要通過發(fā)射事件通知父組件進行數(shù)據(jù)更新(不能修改props中的值,只能讀!!!).所以在計算屬性中我們在set中發(fā)射了事件進行父組件數(shù)據(jù)更新,讀取時我們則直接讀取props中的值就好了。

總結(jié)

到此這篇關(guān)于vue3組件中v-model使用以及講解的文章就介紹到這了,更多相關(guān)vue3組件v-model使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue el-date-picker動態(tài)限制時間范圍案例詳解

    vue el-date-picker動態(tài)限制時間范圍案例詳解

    這篇文章主要介紹了vue el-date-picker動態(tài)限制時間范圍案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 解決vue動態(tài)下拉菜單 有數(shù)據(jù)未反應(yīng)的問題

    解決vue動態(tài)下拉菜單 有數(shù)據(jù)未反應(yīng)的問題

    這篇文章主要介紹了解決vue動態(tài)下拉菜單 有數(shù)據(jù)未反應(yīng)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue實現(xiàn)樹形菜單效果

    vue實現(xiàn)樹形菜單效果

    這篇文章主要為大家詳細介紹了vue實現(xiàn)樹形菜單效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • vue的rules驗證部分可以部分又失效的原因及解決方案

    vue的rules驗證部分可以部分又失效的原因及解決方案

    vue的rules驗證失效,部分可以部分又失效,很多百度都有,但是我這里遇到了一個特別的,那就是prop沒有寫全,導(dǎo)致驗證某一個失效,接下來就跟小編一起來看看這個失效的原因和解決方案吧
    2023-11-11
  • Vue2 Element Schema Form 配置式生成表單的實現(xiàn)

    Vue2 Element Schema Form 配置式生成表單的實現(xiàn)

    本文主要介紹了Vue2 Element Schema Form 配置式生成表單的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Element Badge標記的使用方法

    Element Badge標記的使用方法

    這篇文章主要介紹了Element Badge標記的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 深入理解Vue2.x的虛擬DOM diff原理

    深入理解Vue2.x的虛擬DOM diff原理

    本篇文章主要介紹了Vue2.x的虛擬DOM diff原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue使用mpegts.js的詳細步驟記錄

    vue使用mpegts.js的詳細步驟記錄

    MPEGTS.js是一個輕量級的JavaScript庫,用于處理MPEG-TS流,這篇文章主要給大家介紹了關(guān)于vue使用mpegts.js的詳細步驟記錄,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • vue實現(xiàn)PC端錄音功能的實例代碼

    vue實現(xiàn)PC端錄音功能的實例代碼

    這篇文章主要介紹了vue實現(xiàn)PC端錄音功能的實例代碼,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • Element中table組件(el-table)右側(cè)滾動條空白占位處理

    Element中table組件(el-table)右側(cè)滾動條空白占位處理

    當我設(shè)置了max-height,就會在表格右側(cè)出現(xiàn)一列空白的占位,本文主要介紹了Element中table組件(el-table)右側(cè)滾動條空白占位處理,感興趣的可以了解一下
    2023-09-09

最新評論