• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

    vue雙向數(shù)據(jù)綁定原理探究

    來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:26:16
    文檔

    vue雙向數(shù)據(jù)綁定原理探究

    vue雙向數(shù)據(jù)綁定原理探究:雙向綁定的思想雙向數(shù)據(jù)綁定的思想就是數(shù)據(jù)層與UI層的同步,數(shù)據(jù)再兩者之間的任一者發(fā)生變化時(shí)都會(huì)同步更新到另一者。雙向綁定的一些方法目前,前端實(shí)現(xiàn)數(shù)據(jù)雙向數(shù)據(jù)綁定的方法大致有以下三種:1.發(fā)布者-訂閱者模式(backbone.js)思路:使用自定義的data屬
    推薦度:
    導(dǎo)讀vue雙向數(shù)據(jù)綁定原理探究:雙向綁定的思想雙向數(shù)據(jù)綁定的思想就是數(shù)據(jù)層與UI層的同步,數(shù)據(jù)再兩者之間的任一者發(fā)生變化時(shí)都會(huì)同步更新到另一者。雙向綁定的一些方法目前,前端實(shí)現(xiàn)數(shù)據(jù)雙向數(shù)據(jù)綁定的方法大致有以下三種:1.發(fā)布者-訂閱者模式(backbone.js)思路:使用自定義的data屬

    雙向綁定的思想

    雙向數(shù)據(jù)綁定的思想就是數(shù)據(jù)層與UI層的同步,數(shù)據(jù)再兩者之間的任一者發(fā)生變化時(shí)都會(huì)同步更新到另一者。

    雙向綁定的一些方法

    目前,前端實(shí)現(xiàn)數(shù)據(jù)雙向數(shù)據(jù)綁定的方法大致有以下三種:

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

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

    2.贓值檢測(angular.js)

    思路:通過輪詢的方式檢測數(shù)據(jù)變動(dòng)。才特定的事件觸發(fā)時(shí)進(jìn)入贓值檢測。

    大致如下:

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

    ? XHR響應(yīng)事件 ( $http )

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

    ? Timer事件( $timeout , $interval )

    ? 執(zhí)行 $digest() 或 $apply()

    3.數(shù)據(jù)劫持(vue.js)

    思路:使用Object.defineProperty對(duì)數(shù)據(jù)對(duì)象做屬性get和set的監(jiān)聽,當(dāng)有數(shù)據(jù)讀取和賦值操作時(shí)則調(diào)用節(jié)點(diǎn)的指令,這樣使用最通用的=等號(hào)賦值就可以觸發(fā)了。

    wue雙向數(shù)據(jù)綁定小demo思路

    ① 構(gòu)造一個(gè)Wue對(duì)象,定義該對(duì)象的屬性el、data,創(chuàng)建對(duì)象的時(shí)候傳相應(yīng)數(shù)據(jù),并執(zhí)行init()方法。

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

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

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

    ③ bindText方法,把帶有w-text指令的元素放進(jìn)一個(gè)數(shù)組中,如:w-text='demo',然后令其innerHTML的值等于傳進(jìn)來的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相關(guān)元素)放進(jìn)一個(gè)數(shù)組中,如:w-model='demo',為每一個(gè)元素綁定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]||'';
     //數(shù)據(jù)劫持
     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方法中調(diào)用bindText方法。這是利用了一旦w-model的值在input中被改變,會(huì)自動(dòng)執(zhí)行set方法,所以只有在這個(gè)方法中調(diào)用更新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>雙向數(shù)據(jù)綁定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>

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    vue雙向數(shù)據(jù)綁定原理探究

    vue雙向數(shù)據(jù)綁定原理探究:雙向綁定的思想雙向數(shù)據(jù)綁定的思想就是數(shù)據(jù)層與UI層的同步,數(shù)據(jù)再兩者之間的任一者發(fā)生變化時(shí)都會(huì)同步更新到另一者。雙向綁定的一些方法目前,前端實(shí)現(xiàn)數(shù)據(jù)雙向數(shù)據(jù)綁定的方法大致有以下三種:1.發(fā)布者-訂閱者模式(backbone.js)思路:使用自定義的data屬
    推薦度:
    標(biāo)簽: 原理 VUE 雙向
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久se这里只有精品| 99久久精品免费国产大片| 麻豆精品国产自产在线观看一区| 日韩精品一区二区三区色欲AV| 国产精品成人久久久久久久| 国产AV国片精品| 亚洲精品无码不卡在线播放HE| 成人国产一区二区三区精品| 国产成人精品日本亚洲网址 | 国产精品三级国产电影| 欧美精品一二区| 国产一区二区三区在线观看精品| 久久亚洲精品中文字幕三区| 精品久久久久久久久午夜福利| 正在播放国产精品每日更新| 久久九九久精品国产| 国产高清精品一区| 久久91精品久久91综合| AAA级久久久精品无码片| 久久亚洲私人国产精品| 亚洲欧美日韩国产精品| 日韩美女18网站久久精品| 国产午夜精品一本在线观看| 四虎影视国产精品亚洲精品hd| 久久精品国产99国产电影网 | 欧美精品三区| 久久久精品久久久久久 | 五月花精品视频在线观看| 国产精品国产精品国产专区不卡| 色久综合网精品一区二区| 亚洲国产精品无码久久久秋霞2| 亚洲国产精品日韩专区AV| 四虎永久在线精品免费一区二区| 久久久久久青草大香综合精品 | 成人精品综合免费视频| 精品久久久久久无码专区不卡| 久久亚洲中文字幕精品有坂深雪 | 亚洲欧美国产精品专区久久| 亚洲综合国产精品第一页 | 2021国产成人精品久久| 日本一区精品久久久久影院|