1. 程式人生 > 實用技巧 >Vue 單向資料流&雙向資料繫結原理

Vue 單向資料流&雙向資料繫結原理

  • Vue 的資料流本質上是單向資料流,而我們平時說的雙向資料繫結,只是Vue的一個語法糖,也就是說,Vue在資料流方面既可以實現單向資料流也可以實現雙向資料繫結。

  • 雙向資料繫結實現原理:
    <input type="text" :value="content" @input="onInput">
    <script>
    export default{
        data: { return: {content:"hello"} },
        methods: {
                onInput(e) { 
                     this.content = e.target.value 
                 } 
        }            
    }
    
    </script>

    從上述程式碼中我們可以看出,通過@input事件來監聽使用者行為,一旦觸發了onInput事件,content的值也隨即會發生變化,也就是View中的資料變化導致Model層的資料變化,而在data中去宣告的content的值,也會導致value值的變化,也就是Model層的資料變化導致View的資料變化,這兩個情況我們統稱為資料的雙向繫結。

  • 單向資料流原理:
    <input type = "text" :value="content">
    <script>
    export default{
              data:{ return
    { content:"hello"}} }

    Model層的資料變化時會導致View的資料變化,但是View的資料變化並不會引起Model層的資料變化。
    在這裡單向資料流涉及到了Object.defineProperty()這個內建方法,它可以監聽變數的讀取和寫入並在發生讀取與寫入的時候執行回撥函式;
    Object.defineProperty(obj,prop,descriptor)
    //obj 要定義屬性的物件/監聽的物件 prop 要定義/監聽的物件的屬性名 desc 要定義/修改的屬性描述符/監聽方法

    let a = {};
    Object.defineProperty(a,'text',{
    
               get () {console.log (
    "讀取");} set () {console.log("寫入");} });