国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue2 、vue3 監(jiān)聽對象的變化

這篇具有很好參考價值的文章主要介紹了Vue2 、vue3 監(jiān)聽對象的變化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1? 響應(yīng)式原理

vue響應(yīng)式也叫作數(shù)據(jù)雙向綁定

MVVM模型 (Model-Viem-ViewModel)

  • DOM listeners:實現(xiàn)了頁面與數(shù)據(jù)的綁定,當(dāng)頁面操作數(shù)據(jù)的時候 DOM 和 Model 也會發(fā)生相應(yīng)的變化
  • Data Bindings:??實現(xiàn)了數(shù)據(jù)與頁面的綁定,當(dāng)數(shù)據(jù)發(fā)生變化的時候會自動渲染頁面

2 vue2 數(shù)據(jù)監(jiān)聽

2.1? 實現(xiàn)原理

vue實現(xiàn)數(shù)據(jù)響應(yīng)式,是通過object.defineProperty()對數(shù)據(jù)劫持偵測數(shù)據(jù)變化,發(fā)布訂閱模式進行依賴收集與視圖更新。

object.defineProperty()方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性,并返回此對象。

2.2??object.defineProperty()對數(shù)據(jù)的監(jiān)聽

const obj = {
  name: "one",
  age: 18
}


Object.keys(obj).forEach(key => {
  let value = obj[key]

  Object.defineProperty(obj, key, {
    get: function() {
      console.log(`監(jiān)聽到obj對象的${key}屬性被訪問了`)
      return value
    },
    set: function(newValue) {
      console.log(`監(jiān)聽到obj對象的${key}屬性被設(shè)置值`)
      value = newValue
    }
  })
})

obj.name = "two"
obj.age = 20

console.log(obj.name)   
console.log(obj.age)

obj.height = 1.88

2.3 object.defineProperty()缺陷

1.defineProperty只能監(jiān)聽某個屬性,不能對全對象監(jiān)聽 對一個對象的監(jiān)聽需使用foreach、閉包等技術(shù)

2.?defineproperty不能監(jiān)聽到對象的添加刪除屬性操作

需要開發(fā)者主動調(diào)用相應(yīng)的方法去更新 :Vue.set(),Vue.delete

2.defineproperty不能監(jiān)聽數(shù)組的添加刪除操作

直接使用索引 index 設(shè)置數(shù)組項時,不會被vue檢測到

vue2.0使用數(shù)組重寫的方法實現(xiàn)了數(shù)組的響應(yīng),7個方法分別為

  • push();

  • pop();

  • shift();

  • unshift();

  • splice();

  • sort();

  • reverse()

3 vue3 數(shù)據(jù)監(jiān)聽

3.1 原理?

Proxy?對象用于創(chuàng)建一個對象的代理,從而實現(xiàn)基本操作的攔截和自定義。之后的操作都是直接對Proxy的操作,而不是原有的對象

const p = new Proxy(target, handler)

target?要使用?Proxy?包裝的目標(biāo)對象(可以是任何類型的對象,包括原生數(shù)組,函數(shù),甚至另一個代理)。

handler?一個通常以函數(shù)作為屬性的對象,各屬性中的函數(shù)分別定義了在執(zhí)行各種操作時代理?p?的行為。

handler對象的方法【MDN】(13個捕獲器 trap)? ?

3.2 代碼

const obj = {
  name: 'one',
  age: 18,
};

const objProxy = new Proxy(obj, {
  // 獲取值時的捕獲器
  get: function (target, key) {
    console.log(`監(jiān)聽到對象的${key}屬性被訪問了`, target);
    return target[key];
  },

  // 設(shè)置值時的捕獲器
  set: function (target, key, newValue) {
    target[key] = newValue;
    console.log(`監(jiān)聽到對象的${key}屬性被設(shè)置值`, target);
  },
  // 監(jiān)聽in的捕獲器
  has: function (target, key) {
    console.log(`監(jiān)聽到對象的${key}屬性in操作`, target);
    return key in target;
  },
  // 監(jiān)聽delete的捕獲器
  deleteProperty: function (target, key) {
    delete target[key];
    console.log(`監(jiān)聽到對象的${key}屬性delete操作`, target);
  },
});

console.log(objProxy.name);
console.log(objProxy.age);

objProxy.name = 'two';
objProxy.age = 20;

// in操作符
console.log('name' in objProxy);

// delete操作
delete objProxy.name;
console.log(obj.name);
console.log(obj.age);

?執(zhí)行結(jié)果

vue3監(jiān)聽對象屬性值變化,前端,vue.js,javascript

?文章來源地址http://www.zghlxwxcb.cn/news/detail-756673.html

3.3?

到了這里,關(guān)于Vue2 、vue3 監(jiān)聽對象的變化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 在 Vue.js 中,使用 watch 監(jiān)聽data變量如:對象屬性/data變量

    在 Vue.js 中,使用 `watch` 監(jiān)聽對象屬性 的變化時,應(yīng)該將屬性名作為 字符串 傳遞給 `watch` 選項。 示例如下: ```javascript updateAddChuZhenForm函數(shù) 現(xiàn)在,當(dāng) `isCheck1` 或 `isCheck2` 的值發(fā)生變化時,相應(yīng)的 `watch` 函數(shù)將被觸發(fā)。 ``` 如果你想要 監(jiān)聽一個普通變量 ,而 不是 Vue 實例的屬

    2024年02月09日
    瀏覽(28)
  • 【前端vue升級】vue2+js+elementUI升級為vue3+ts+elementUI plus

    【前端vue升級】vue2+js+elementUI升級為vue3+ts+elementUI plus

    gogo code 是一個基于 AST (源代碼的抽象語法結(jié)構(gòu)樹狀表現(xiàn)形式)的 JavaScript/Typescript/HTML 代碼轉(zhuǎn)換工具,可以用它來構(gòu)建一個代碼轉(zhuǎn)換程序來幫助自動化完成如框架升級、代碼重構(gòu)、多平臺轉(zhuǎn)換等工作。 當(dāng)前 GoGoCode 支持解析和操作如下類型的代碼: ○JavaScript(JSX) ○Typescript

    2024年02月12日
    瀏覽(31)
  • vue3監(jiān)聽路由的變化

    vue3監(jiān)聽路由的變化

    可以使用監(jiān)聽 router.currentRoute.value 的值,,來監(jiān)聽路由的變化。 引入: setup使用 : 控制臺輸出的值 newValue : 如果我們只需要監(jiān)聽當(dāng)前路由 name 的變化,就可以這么監(jiān)聽 router.currentRoute.value.name immediate:true //true 就表示會立即執(zhí)行。(watch默認(rèn)綁定,頁面首次加載時,是不會執(zhí)行

    2024年02月12日
    瀏覽(21)
  • vue3 監(jiān)聽props 的變化

    再三說明 僅僅個人學(xué)習(xí)用,不誤導(dǎo)別人 我覺得props 會創(chuàng)建對應(yīng)的屬性,去接受這些值,比如傳遞一個ref的基本值 age props.age = age.value 傳遞一個ref的引用值 person props.person= person.value 傳遞一個reactive的引用值 person props.person= person 最開始時候,props指向了一個響應(yīng)式的reactive pe

    2024年02月11日
    瀏覽(33)
  • Vue3優(yōu)雅地監(jiān)聽localStorage變化

    Vue3優(yōu)雅地監(jiān)聽localStorage變化

    目錄 ??前言? ?? 為什么要這樣做? ?? 思路 ?? 實現(xiàn) ?? 實現(xiàn)中介者模式 ?? 重寫localStorage ?? 實現(xiàn)useStorage hook ?? 測試 ?? 使用localStorage ?? 監(jiān)聽localStorage變化 ?? 結(jié)果 ????????最近在研究框架,也仔細(xì)用了Vue3一些功能,今天分享一次我的實踐: ????????原生的

    2024年02月08日
    瀏覽(24)
  • 19-vue2到vue3的一些變化

    Vue 2.x 有許多全局 API 和配置。 例如:注冊全局組件、注冊全局指令等。 Vue3.0中對這些API做出了調(diào)整: 將全局的API,即: Vue.xxx 調(diào)整到應(yīng)用實例( app )上 2.x 全局 API( Vue ) 3.x 實例 API ( app ) Vue.config.xxxx app.config.xxxx Vue.config.productionTip 移除 Vue.component app.component Vue.directive

    2024年02月07日
    瀏覽(23)
  • Vue3組件不發(fā)生變化,如何監(jiān)聽pinia中數(shù)據(jù)變化?

    在開發(fā)過程中,我們需要將一些跨組件使用的的數(shù)據(jù)在pinia中進行狀態(tài)管理,組件在初始化的時候我們能通過onMounted,computed,watch,watchEffect獲取到存儲在pinia state中的內(nèi)容,有一些特殊情況,在組件初始化之后我們無法通過以上四種情況獲取state中的內(nèi)容,這時候我們怎么做呢?

    2024年02月11日
    瀏覽(28)
  • vue3 動態(tài)監(jiān)聽瀏覽器窗口變化

    定義一個屬性記錄寬度 在 vue mounted 的時候 去掛載一下 window.onresize 方法 去監(jiān)聽這個 屬性值的變化,如果發(fā)生變化則講這個 val 傳遞給 this.screenWidth 這樣screenWidth就跟隨瀏覽器的窗口大小動態(tài)變化了 進行使用

    2024年02月13日
    瀏覽(22)
  • Vue3前端開發(fā),如何獲取組件內(nèi)dom對象以及子組件的屬性和方法

    Vue3前端開發(fā),如何獲取組件內(nèi)dom對象以及子組件的屬性和方法

    Vue3前端開發(fā),借助Ref來獲取組件內(nèi)dom對象,借助defineExpose編譯宏可以獲取到子組件的屬性和方法。 app入口文件,我們作為父組件,在里面調(diào)用了自定義組件TestCom.vue。 先做了一個測試,借助于ref來訪問自身的dom對象。如圖所示是可以拿到的。 ref又稱謂鉤子函數(shù),在vue2版本中

    2024年01月22日
    瀏覽(40)
  • vue3 實現(xiàn)監(jiān)聽store里state狀態(tài)變化

    需要注意: 不能直接監(jiān)聽對象的屬性值,需要寫成getter函數(shù)。 總結(jié): watch 的第一個參數(shù)可以是不同形式的數(shù)據(jù)源,它可以是一個ref(包括計算屬性),一個響應(yīng)式對象,一個getter函數(shù),或多個數(shù)據(jù)源組成的數(shù)組。 不能直接監(jiān)聽響應(yīng)式對象的屬性: 這里需要寫成返回對象屬

    2024年02月17日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包