Vue 組件的雙向數據綁定

我們之前已經有學過在普通的 DOM 元素上通過 v-model 指令來進行簡單的雙向數據綁定,一般我們會在表單元素上使用這個指令.

1.通過下面的代碼先複習一下 v-model 指令的基本用法:

  <div id="app">
        <input type="text" v-model = "value">
        {{value}}
    </div>
    <script>
        let vm = new Vue({
            el :"#app",
            data:{
                value : "",
            },
        })
    </script>

所謂的雙向數據綁定就是顯示數據發生變化,Vue 中的數據也隨之發生變化, Vue 中的數據發生變化,視圖中的數據也會隨之變化.
在這裏插入圖片描述

2. 使用事件的表單控件

就是我們將data中的數據綁定到表單的value值上, 這樣只會在當數據變化的時候改變視圖, 但是視圖的改變會不會修改數據

那麼我們就可以使用一個事件來處理這件事情, 當用戶輸入內容後就會觸發函數, 在函數內獲取表單最新的值修改掉data中數據.

3.利用自定義事件處理表單中的雙向數據綁定

我們利用同樣的思路, 將父組件的數據通過單向下行數據流傳給子組件

在利用自定義事件,將子組件中的數據傳遞給父組件, 處理成自定義的雙向數據綁定

示例代碼如下:

<div id="app">
    <div> {{msg}}</div>

    <my-com
        :value = "msg"
        @input = "value => this.msg = value"
    ></my-com>
</div>

<template id="mycom">
    <div>
        <input
                :value = "value"
                @input = "changeInput"
                type="text"
        />
    </div>
</template>
<script>
    let MyCom = ({
        props:["value"],
        template:"#mycom",
        methods:{
            changeInput(event){
                let value = event.target.value;
                console.log(value)
                this.$emit("input",value)
            }
        }
    })
    let vm = new Vue({
        el :"#app",
        data:{
            msg : "",
        },
        components:{
            MyCom,
        }
    })
</script>

4.自定義事件的v-model

Vue在2.2.0版本中給允許我們在自定義組件上使用v-model來處理雙向數據綁定,

<div id="app">
    <div> {{msg}}</div>
	<my-com
        v-model = "msg"
    ></my-com>
</div>

<template id="mycom">
    <div>
        <input
                :value = "value"
                @input = "changeInput"
                type="text"
        />
    </div>
</template>
<script>
    let MyCom = ({
        props:["value"],
        template:"#mycom",
        methods:{
            changeInput(event){
                let value = event.target.value;
                console.log(value)
                this.$emit("input",value)
            }
        }
    })
    let vm = new Vue({
        el :"#app",
        data:{
            msg : "",
        },
        components:{
            MyCom,
        }
    })
</script>

這種方式就可以簡單的實現組件間的雙向數據綁定.
我們會發現在組件中使用v-model指令,等價於

<my-com
        :value = "msg"
        @input = "value => this.msg = value"
    ></my-com>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章