欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue2.x和Vue3.x的雙向綁定原理詳解

 更新時(shí)間:2020年11月05日 10:41:52   作者:Silent Land  
這篇文章主要給大家介紹了關(guān)于Vue2.x和Vue3.x的雙向綁定原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

雙向的綁定的原理

通過Object.defineproperty()重新定義對(duì)象屬性的set方法、get方法來實(shí)現(xiàn)的,從這個(gè)屬性中取值時(shí)會(huì)觸發(fā)get方法,改變這個(gè)屬性時(shí)會(huì)觸發(fā)set方法,所以我們只要將一些需要更新view的方法放在這里面就可以實(shí)現(xiàn)data更新view了,而view更新data其實(shí)可以通過事件監(jiān)聽實(shí)現(xiàn)

當(dāng)視圖上的數(shù)據(jù)發(fā)生改變時(shí), data 中的數(shù)據(jù)也發(fā)生改變當(dāng) data 中的數(shù)據(jù)發(fā)生改變時(shí),視圖中的數(shù)據(jù)也發(fā)生改變 Object.defineProperty()

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

語法Object.defineProperty(obj, prop, descriptor)

參數(shù):

  • obj
    要定義屬性的對(duì)象。
  • prop
    要定義或修改的屬性的名稱或 Symbol 。
  • descriptor
    要定義或修改的屬性描述符。

返回值

被傳遞給函數(shù)的對(duì)象。

對(duì)象里目前存在的屬性描述符有兩種主要形式:數(shù)據(jù)描述符存取描述符。數(shù)據(jù)描述符是一個(gè)具有值的屬性,該值可以是可寫的,也可以是不可寫的。存取描述符是由 getter 函數(shù)setter 函數(shù)所描述的屬性。一個(gè)描述符只能是這兩者其中之一;不能同時(shí)是兩者。

作用

* 可以給對(duì)象的一個(gè)屬性設(shè)置兩個(gè)方法:

* get:從這個(gè)屬性中取值時(shí)會(huì)觸發(fā)get方法

* set:給這個(gè)屬性賦值時(shí)會(huì)觸發(fā)set方法

 let obj = {}
 // 給obj的name屬性設(shè)置兩個(gè)方法get&set
 Object.defineProperty(obj,'name',{
 set:function (value){//value就是給name賦值的結(jié)果
  console.log('觸發(fā)了set');
  this._name=value//保存這個(gè)值 這里不能直接用name,因?yàn)闀?huì)觸發(fā)set
 },
 get:function(){
  console.log('觸發(fā)了get');
  // 將保存的值返回回來
  return this._name
 }
 })

在給name屬性賦值的時(shí)候觸發(fā)set方法,在set方法中將值存起來

取值時(shí)觸發(fā)get方法,在get方法中將值返回回來

vue2.x雙向綁定原理

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
</head>
<body>
 <!-- 這里相當(dāng)于V -->
 <div id="v"></div>
 <input type="text" id="ipt">
</body>
<script>
 // MVVM:
 // 當(dāng)V改變,M自動(dòng)改變
 // 當(dāng)M改變,V自動(dòng)改變
 // 這里相當(dāng)于M

 let data = {}
 // 給data中的name屬性設(shè)置兩個(gè)方法get ,set
 Object.defineProperty(data,'name',{
 set:function(value){
  // 當(dāng)M改變時(shí),V自動(dòng)改變
  document.querySelector('#v').innerHTML = value
 },
 get:function(){
  return this._name
 }
 })
 // 給input添加一個(gè)內(nèi)容改變的之后會(huì)觸發(fā)的事件
 document.querySelector('#ipt').oninput = function(e){
 data.name = e.target.value
 }
</script>
</html>

一旦輸入框中的內(nèi)容發(fā)生改變,就會(huì)觸發(fā)oninput事件馬上改變data中的內(nèi)容,一旦data中的name發(fā)生改變就會(huì)觸發(fā)set方法將最新的值賦值給v,這樣就實(shí)現(xiàn)了數(shù)據(jù)的雙向綁定

 

vue3.x雙向綁定原理

Vue3.x是通過proxy(代理)實(shí)現(xiàn)的數(shù)據(jù)的雙向綁定

proxy

跟Object.defineProperty一樣也可以給對(duì)象的屬性添加兩個(gè)方法get&set

區(qū)別:

  • Object.defineProperty一次性只能給對(duì)象的一個(gè)屬性添加get&set方法
  • Proxy:一次性給對(duì)象所有屬性都設(shè)置get&set方法

用法:

  • 創(chuàng)建一個(gè)新的proxy對(duì)象
	let p = new Proxy(obj,{get:function(){},set:function(){}})
<script>
 let obj = {}
 let p = new Proxy(obj,{
 get:function(obj,prop){
  //obj :被代理的對(duì)象 prop:要操作的屬性
  console.log('觸發(fā)了get');
  return obj[prop]
 },
 set:function(obj,prop,value){
  // obj:被代理的對(duì)象
  // prop要賦值的屬性
  // value要賦值的結(jié)果
  console.log('觸發(fā)了set');
  // 將賦值的結(jié)果保存起來
  obj[prop] = value
 }
 })
</script>


vue3.x實(shí)現(xiàn)數(shù)據(jù)的雙向綁定

總結(jié)

到此這篇關(guān)于Vue2.x和Vue3.x的雙向綁定原理的文章就介紹到這了,更多相關(guān)Vue2.x和Vue3.x雙向綁定原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue+iview 實(shí)現(xiàn)可編輯表格的示例代碼

    vue+iview 實(shí)現(xiàn)可編輯表格的示例代碼

    這篇文章主要介紹了vue+iview 實(shí)現(xiàn)可編輯表格的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Vue單頁應(yīng)用引用單獨(dú)的樣式文件的兩種方式

    Vue單頁應(yīng)用引用單獨(dú)的樣式文件的兩種方式

    這篇文章給大家介紹Vue單頁應(yīng)用如何引用單獨(dú)的樣式文件,本文以css文件為例,通過兩種方式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2018-03-03
  • vue中elementUI表單循環(huán)驗(yàn)證方式

    vue中elementUI表單循環(huán)驗(yàn)證方式

    這篇文章主要介紹了vue中elementUI表單循環(huán)驗(yàn)證方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue3標(biāo)簽中的ref屬性詳解及如何使用$refs獲取元素

    vue3標(biāo)簽中的ref屬性詳解及如何使用$refs獲取元素

    這篇文章主要給大家介紹了關(guān)于vue3標(biāo)簽中的ref屬性詳解及如何使用$refs獲取元素的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-11-11
  • Vue使用vue-pdf實(shí)現(xiàn)PDF文件預(yù)覽

    Vue使用vue-pdf實(shí)現(xiàn)PDF文件預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了Vue如何使用vue-pdf實(shí)現(xiàn)PDF文件預(yù)覽的功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-03-03
  • 關(guān)于vue中路由的跳轉(zhuǎn)和參數(shù)傳遞,參數(shù)獲取

    關(guān)于vue中路由的跳轉(zhuǎn)和參數(shù)傳遞,參數(shù)獲取

    這篇文章主要介紹了關(guān)于vue中路由的跳轉(zhuǎn)和參數(shù)傳遞,參數(shù)獲取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue執(zhí)行配置選項(xiàng)npm?run?serve的本質(zhì)圖文詳解

    vue執(zhí)行配置選項(xiàng)npm?run?serve的本質(zhì)圖文詳解

    本地開發(fā)一般通過執(zhí)行npm run serve命令來啟動(dòng)項(xiàng)目,那這行命令到底存在什么魔法?下面這篇文章主要給大家介紹了關(guān)于vue執(zhí)行配置選項(xiàng)npm?run?serve的本質(zhì)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • Vue?Element?plus使用方法梳理

    Vue?Element?plus使用方法梳理

    Element?Plus,由餓了么大前端團(tuán)隊(duì)開源出品的一套為開發(fā)者、設(shè)計(jì)師和產(chǎn)品經(jīng)理準(zhǔn)備的基于?Vue?3.0?的組件庫,Element?Plus是基于Vue3面向設(shè)計(jì)師和開發(fā)者的組件庫,提供了配套設(shè)計(jì)資源,幫助你的網(wǎng)站快速成型
    2022-12-12
  • Vue3?中實(shí)現(xiàn)元素拖拽功能

    Vue3?中實(shí)現(xiàn)元素拖拽功能

    這篇文章主要介紹了在Vue3中實(shí)現(xiàn)飄逸的元素拖拽,在本次案例中需要認(rèn)真思考對(duì)應(yīng)的幾個(gè)坐標(biāo)和移動(dòng)時(shí)坐標(biāo)如何更新,事件的使用要成對(duì)出現(xiàn),如何在這個(gè)拖拽的 Icon 上增加點(diǎn)擊事件時(shí)還需要多做一些處理,需要的朋友可以參考下
    2023-07-07
  • 基于elementUI豎向表格、和并列的案例

    基于elementUI豎向表格、和并列的案例

    這篇文章主要介紹了基于elementUI豎向表格、和并列的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評(píng)論