數據劫持

一、什麼是數據劫持

數據劫持是指在一個javascript對象的屬性被修改之前,先攔截這個修改操作,執行自定義的操作,比如提醒用戶或更新界面。通常情況下,開發者需要監聽一個對象的屬性,當這個屬性被修改時,立即執行一些操作。

Vue.js是一種基於MVVM模式的組件化構建web頁面的前端框架,它採用了數據劫持的方式來監聽數據的變化來實現雙向綁定,具有高效穩定的特點。使用數據劫持可以方便地實現開發者想要的功能。

二、數據劫持的優勢

Vue.js採用數據劫持監聽數據的變化,相比直接監聽DOM元素,有以下優勢:

1、性能優越:由於直接監聽DOM元素的方式會耗費很多資源,而採用數據劫持的方式不會增加UI渲染的次數,降低了渲染的時間。

2、代碼簡潔:採用數據劫持後,無需大量的手動判斷屬性是否改變就可以完成listener的設置,縮短了編碼時間。

3、更快的渲染速度:Vue.js在實現DOM操作,結合依賴收集和非同步更新隊列等技術,可以大大提升界面渲染效率。

三、Vue.js中的數據劫持

Vue.js中的響應式數據劫持機制指的是,當頁面視圖渲染時,當頁面的數據發生更改時,會自動觸發視圖進行更新。

Vue.js通過Object.defineProperty()來劫持對象屬性的getter和setter操作。Object.defineProperty()是一個屬性描述符的方法,通過它可以把這個屬性設置為不可枚舉,並且在get和set的時候可以插入執行代碼。

  // 定義一個對象
  let person = {
    name: "Lucia",
    sex: "female"
  }
  //通過defineObjectProperty的setter方法監聽name屬性的值的修改,再執行我們要執行的邏輯
  Object.defineProperty(person, "name", {
    set: function(val) {
      console.log(val + "has been changed")
      console.log("previous value is " + this.name)
      this._name = val
    },
    get: function() {
      return this._name
    }
  })

這樣無論何時修改person.name的值,都會觸發setter方法,從而執行對象內置的自定義邏輯。

四、手動觸發數據劫持

在Vue.js框架中,數據劫持是由Vue.js自動觸發的。但在其他應用場景中,我們需要手動觸發數據劫持,在以下情況中需要手動觸發:

1、新數據未被監聽: 在新增的數據中,如果有部分數據沒有被監聽,那麼當這些數據被修改後需要手動觸發數據劫持。

2、某些變數無法被監聽: 在某些情況下,有些變數無法實現數據劫持。如數組的變化,需要特殊處理。當這些變數發生變化時就需要手動觸發數據劫持。

  
    var app = new Vue({
      data: {
        oldObj: {a:1, b:2, c:3}, 
        newObj: {a:1, b:2, c:3}
      }
    });
    // 修改newObj的屬性c,手動觸發數據劫持
    app.$set(app.newObj, 'c', 4);
    // 修改oldObj的修改i不會觸發數據劫持
    app.oldObj.i = 4;
  

五、Vue.js中的$watch

Vue.js提供了watch和computed兩種方式來監聽數據變化。watch是數據變化監聽的一種簡單實用的方式,當監聽到數據變化時,執行對應的回調函數。

  
    var app = new Vue({
      data: {
        message: 'Hello Vue.js!'
      },
      watch: {
        // 監聽message的變化
        message: function (newValue, oldValue) {
          console.log('New Message:'+newValue+', Old Message:'+oldValue);
        }
      }
    });
  

六、總結

數據劫持是Vue.js框架中的核心特性之一。採用數據劫持可以實現數據綁定的雙向更新。Vue.js通過Object.defineProperty()來實現數據劫持,在Vue.js框架中,數據劫持是由框架自動觸發的,開發者只需關注邏輯層面的代碼編寫即可。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-13 13:29
下一篇 2024-12-13 13:29

相關推薦

  • Python讀取CSV數據畫散點圖

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

    編程 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中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python如何打亂數據集

    本文將從多個方面詳細闡述Python打亂數據集的方法。 一、shuffle函數原理 shuffle函數是Python中的一個內置函數,主要作用是將一個可迭代對象的元素隨機排序。 在…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29

發表回復

登錄後才能評論