Vue實現響應式動態數據綁定

一、Vue的響應式數據原理

Vue.js是一款構建用戶界面的漸進式框架,Vue.js採用MVVM模式(Model-View-ViewModel),核心是實現了數據雙向綁定。

Vue中是如何實現數據綁定的呢?當Vue實例中的數據發生改變時,Vue會自動觸發某些操作來更新頁面上的數據,這其中的核心原理是Vue利用了ES6中的Object.defineProperty()方法來實現數據觀測(數據代理),從而實現了雙向數據綁定。

在Vue中,每個Vue實例都會對應一個單獨的Watcher實例,用於監聽數據的變化;而每個Watcher實例都會對應一個單獨的Dep實例,用於存儲Watcher實例,同時當數據發生改變時會通知所有存儲在Dep實例中的Watcher實例。以下是Vue的響應式數據原理的示意圖:

    
    // 示例代碼
    var data = {price: 100, quantity: 2}
    
    function defineReactive(obj, key, val) {
        var dep = new Dep()
        Object.defineProperty(obj, key, {
            enumerable: true,
            configurable: true,
            get: function() {
                if (Dep.target) {
                    dep.addSub(Dep.target)
                }
                return val
            },
            set: function(newVal) {
                if (val === newVal) {
                    return
                }
                val = newVal
                dep.notify()
            }
        })
    }
    
    function observe(data) {
        if (!data || typeof data !== 'object') {
            return
        }
        Object.keys(data).forEach((key) => {
            defineReactive(data, key, data[key])
        })
    }
    
    class Dep {
        constructor() {
            this.subs = []
        }
        addSub(sub) {
            this.subs.push(sub)
        }
        notify() {
            this.subs.forEach((sub) => {
                sub.update()
            })
        }
    }
    
    class Watcher {
        constructor(vm, exp, cb) {
            this.vm = vm
            this.exp = exp
            this.cb = cb
    
            Dep.target = this
            this.value = this.get()
            Dep.target = null
        }
        get() {
            var value = this.vm
            this.exp.split('.').forEach((key) => {
                value = value[key]
            })
            return value
        }
        update() {
            this.cb.call(this.vm, this.get())
        }
    }
    
    var vm = observe(data)
    
    new Watcher(vm, 'price', function() {
        console.log('price變化了')
    })
    
    data.price = 200 // price變化了
    

二、Vue的動態數據綁定

動態綁定是Vue中的重要功能之一,通過它,我們可以在頁面上動態地改變數據,而不需要刷新整個頁面。在Vue中使用動態數據綁定非常簡單,只需要在數據引用的位置加上雙花括號{{}}就可以了。


// 示例代碼
{{message}}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/304880.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:06
下一篇 2025-01-01 11:06

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • QML 動態加載實踐

    探討 QML 框架下動態加載實現的方法和技巧。 一、實現動態加載的方法 QML 支持從 JavaScript 中動態指定需要加載的 QML 組件,並放置到運行時指定的位置。這種技術…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進制的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進制。 一、AES加密介紹 AE…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python愛心代碼動態

    本文將從多個方面詳細闡述Python愛心代碼動態,包括實現基本原理、應用場景、代碼示例等。 一、實現基本原理 Python愛心代碼動態使用turtle模塊實現。在繪製一個心形的基礎…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29

發表回復

登錄後才能評論