亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue雙向數據綁定原理探究(附demo)

2019-11-19 17:54:22
字體:
來源:轉載
供稿:網友

昨天被導師叫去研究了一下vue的雙向數據綁定原理。。。本來以為原理的東西都非常高深,沒想到vue的雙向綁定真的很好理解啊。。。自己動手寫了一個。

傳送門

雙向綁定的思想

雙向數據綁定的思想就是數據層與UI層的同步,數據再兩者之間的任一者發生變化時都會同步更新到另一者。

雙向綁定的一些方法

目前,前端實現數據雙向數據綁定的方法大致有以下三種:

1.發布者-訂閱者模式(backbone.js)

思路:使用自定義的data屬性在HTML代碼中指明綁定。所有綁定起來的JavaScript對象以及DOM元素都將“訂閱”一個發布者對象。任何時候如果JavaScript對象或者一個HTML輸入字段被偵測到發生了變化,我們將代理事件到發布者-訂閱者模式,這會反過來將變化廣播并傳播到所有綁定的對象和元素。

2.贓值檢測(angular.js)

思路:通過輪詢的方式檢測數據變動。才特定的事件觸發時進入贓值檢測。

大致如下:

•   DOM事件,譬如用戶輸入文本,點擊按鈕等。( ng-click )

•   XHR響應事件 ( $http )

•   瀏覽器Location變更事件 ( $location )

•   Timer事件( $timeout , $interval )

•   執行 $digest() 或 $apply()

3.數據劫持(vue.js)

思路:使用Object.defineProperty對數據對象做屬性get和set的監聽,當有數據讀取和賦值操作時則調用節點的指令,這樣使用最通用的=等號賦值就可以觸發了。

wue雙向數據綁定小demo思路

①  構造一個Wue對象,定義該對象的屬性el、data,創建對象的時候傳相應數據,并執行init()方法。

var Wue=function(params){ this.el=document.querySelector(params.el); this.data=params.data; this.init();};

②  Init方法中執行bindText和bindModel方法,這兩個方法分別是解析dom中綁定了w-model、w-text指令的html,并作相應處理。

init:function(){  this.bindText();  this.bindModel(); }

③  bindText方法,把帶有w-text指令的元素放進一個數組中,如:w-text='demo',然后令其innerHTML的值等于傳進來的data[demo]。

bindText:function(){  var textDOMs=this.el.querySelectorAll('[w-text]'),  bindText;  for(var i=0;i<textDOMs.length;i++){  bindText=textDOMs[i].getAttribute('w-text');  textDOMs[i].innerHTML=this.data[bindText];  } }

④  bindModel方法,把帶有w-model指令的元素(一般為form相關元素)放進一個數組中,如:w-model='demo',為每一個元素綁定keyup事件(兼容瀏覽器寫法)。

bindModel:function(){ var modelDOMs=this.el.querySelectorAll('[w-model]'), bindModel; var _that=this; for(var i=0;i<modelDOMs.length;i++){ bindModel=modelDOMs[i].getAttribute('w-model'); modelDOMs[i].value=this.data[bindModel]||''; //數據劫持 this.defineObj(this.data,bindModel); if(document.addEventListener){ modelDOMs[i].addEventListener('keyup',function(event) {  console.log('test');  e=event||window.event;  _that.data[bindModel]=e.target.value; },false); }else{ modelDOMs[i].attachEvent('onkeyup',function(event){  e=event||window.event;  _that.data[bindModel]=e.target.value;  },false); } } }

⑤  使用Object.defineProperty,定義set和get方法,并在set方法中調用bindText方法。這是利用了一旦w-model的值在input中被改變,會自動執行set方法,所以只有在這個方法中調用更新w-text的方法即可。

defineObj:function(obj,prop,value){  var val=value||'';  var _that=this;  try{  Object.defineProperty(obj,prop,{  get:function(){  return val;  },  set:function(newVal){  val=newVal;  _that.bindText();  }  })   }catch (err){  console.log('Browser not support!')  }  }

⑥使用

html:<br><h3>雙向數據綁定demo</h3><div id="wrap"> <input type="text" w-model='demo'> <h5 w-text='demo'></h5></div><br>js: <script src='../js/wue.js'></script> <script> new Wue({ el:'#wrap', data:{  demo:'winty' } }) </script> 

完整demo下載:https://github.com/LuckyWinty/two-way-data

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九久久综合网站| 亚洲国产精品va| 国产精品久久久久77777| 久久69精品久久久久久国产越南| 高清在线视频日韩欧美| 欧美激情视频播放| 伊人久久久久久久久久| 国产精品日韩专区| 欧美精品videofree1080p| 日韩美女在线观看| 国产精品毛片a∨一区二区三区|国| 日韩精品福利网站| 91热福利电影| 都市激情亚洲色图| 欧美老肥婆性猛交视频| 狠狠躁夜夜躁人人躁婷婷91| 欧美性生交大片免费| 亚洲人成电影在线| 日韩欧美a级成人黄色| 欧美成人高清视频| 亚洲在线一区二区| 国产精品va在线播放我和闺蜜| 九色成人免费视频| 国产精品自产拍在线观看中文| 久久99国产精品久久久久久久久| 国产精品久久久久久久久免费| 在线成人激情黄色| 亚洲精品久久久久国产| 国产91色在线|免| 亚洲香蕉伊综合在人在线视看| 久久久久久久久久av| 欧美裸体xxxx极品少妇软件| 久久影院中文字幕| 日本久久精品视频| 亚洲美女免费精品视频在线观看| 国产久一一精品| 欧美精品性视频| 日本伊人精品一区二区三区介绍| 一本一道久久a久久精品逆3p| 色婷婷av一区二区三区在线观看| 日本国产欧美一区二区三区| 欧美日韩亚洲国产一区| 亚洲九九九在线观看| 日韩的一区二区| 久久91精品国产91久久跳| 日本午夜人人精品| 国产精品主播视频| 欧美福利视频网站| 性欧美在线看片a免费观看| 日韩一区在线视频| 亚洲精品中文字| 精品国产一区二区三区四区在线观看| 日韩在线播放一区| 91社影院在线观看| 深夜福利91大全| 欧美成人久久久| 成人久久久久久久| 欧美日韩中国免费专区在线看| 亚洲成av人影院在线观看| 日韩av不卡在线| 久久久久久免费精品| 日本亚洲欧美三级| 最近2019中文字幕第三页视频| 91精品视频免费看| 亚洲国产天堂久久国产91| 亚洲网站在线观看| 91国产精品电影| 亚洲天堂视频在线观看| 永久免费精品影视网站| 国产欧美一区二区三区视频| 国产精品视频免费在线观看| 98视频在线噜噜噜国产| 欧美午夜精品久久久久久人妖| 91影视免费在线观看| 91精品视频在线播放| 亚洲春色另类小说| 4k岛国日韩精品**专区| 日韩免费看的电影电视剧大全| 国产欧美va欧美va香蕉在| 国产精品美女www| 国产精品欧美亚洲777777| 国产精品久久久久久久av电影| 欧美日韩xxxxx| 精品成人乱色一区二区| 国模精品视频一区二区三区| 91精品国产一区| 亚洲精品免费一区二区三区| 亚洲va码欧洲m码| 欧美情侣性视频| 日本精品久久久久久久| 日韩av片电影专区| 欧美日韩一区二区在线| 国产精品91一区| 午夜精品久久17c| 欧美激情成人在线视频| 久久手机精品视频| 国产精品欧美亚洲777777| 国产91色在线|免| 国模吧一区二区| 精品国产91乱高清在线观看| 色一情一乱一区二区| 欧美又大粗又爽又黄大片视频| 欧美性猛交xxxx乱大交| 亚洲精品美女网站| 亚洲风情亚aⅴ在线发布| 成人精品福利视频| 热久久视久久精品18亚洲精品| 国产精品久久久久久久久久久不卡| 精品国产视频在线| 伊人久久久久久久久久| 亚洲aⅴ日韩av电影在线观看| 韩日精品中文字幕| 亚洲精品日韩欧美| 欧美激情国内偷拍| 大胆人体色综合| 精品亚洲va在线va天堂资源站| 亚洲图片欧洲图片av| 亚洲a级在线播放观看| 欧美二区在线播放| 91欧美激情另类亚洲| 久久久午夜视频| 奇门遁甲1982国语版免费观看高清| 日韩av电影手机在线观看| 日韩欧美国产中文字幕| 欧美性极品xxxx娇小| 久久6免费高清热精品| 国产精品无av码在线观看| 成人午夜小视频| 色爱精品视频一区| 国产日产久久高清欧美一区| 久久久精品国产亚洲| 91精品久久久久久| 亚洲人成电影在线观看天堂色| 欧美日韩国产精品一区| 久久五月天色综合| 亚洲国产精久久久久久久| 日本亚洲精品在线观看| 国产精品视频26uuu| 亚洲成人a**站| 久久九九有精品国产23| 日韩中文字幕在线视频| 欧美高清视频免费观看| 久久中文久久字幕| 国产精品白丝av嫩草影院| 91人成网站www| 在线国产精品播放| 欧美日韩在线观看视频| 久久久999精品| 成人精品福利视频| 热re99久久精品国产66热| 日韩免费看的电影电视剧大全| 欧美日韩一区二区三区| 亚洲欧美变态国产另类| 国产视频久久久| 欧美激情国产日韩精品一区18| 国产人妖伪娘一区91| 亚洲www永久成人夜色| 中文字幕日韩精品在线观看| 欧美激情一区二区三级高清视频| 国产一区红桃视频| 一区二区三区国产在线观看| 成人在线播放av| 亚洲午夜小视频| 欧美又大粗又爽又黄大片视频|