<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

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

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

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

        雙向綁定的思想

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

        雙向綁定的一些方法

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

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

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

        2.贓值檢測(angular.js)

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

        大致如下:

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

        ? XHR響應事件 ( $http )

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

        ? Timer事件( $timeout , $interval )

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

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

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

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

        ① 構造一個Wue對象,定義該對象的屬性el、data,創(chuà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方法,這兩個方法分別是解析dom中綁定了w-model、w-text指令的html,并作相應處理。

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

        ③ bindText方法,把帶有w-text指令的元素放進一個數(shù)組中,如: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相關元素)放進一個數(shù)組中,如: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]||'';
         //數(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方法中調用bindText方法。這是利用了一旦w-model的值在input中被改變,會自動執(zhí)行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>雙向數(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)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 好男人www免费高清视频在线| 亚洲自偷自偷在线成人网站传媒| 亚洲国产成人无码AV在线 | 日韩在线免费视频| 久久精品国产96精品亚洲 | 亚洲导航深夜福利| 9420免费高清在线视频| 亚洲第一中文字幕| 99热这里有免费国产精品| 亚洲成人免费在线| 91香焦国产线观看看免费| 亚洲综合在线视频| 狼群影院在线观看免费观看直播| 亚洲高清资源在线观看| 131美女爱做免费毛片| 亚洲五月丁香综合视频| 蜜臀91精品国产免费观看| 亚洲影院天堂中文av色| 国产国产人免费人成免费视频 | 免费大片在线观看网站| 男女作爱免费网站| 亚洲区小说区激情区图片区| 99免费在线视频| 91亚洲va在线天线va天堂va国产 | 亚洲精品少妇30p| 久久美女网站免费| 亚洲精品动漫在线| 精品国产免费观看久久久 | 亚洲色一区二区三区四区| 国产成人免费a在线视频色戒| 国产亚洲精品仙踪林在线播放| 亚洲成a人片在线观看日本麻豆| 中国一级毛片免费看视频| 久久久久久久亚洲Av无码| 久久久久国色AV免费看图片| 高潮内射免费看片| 亚洲av鲁丝一区二区三区| 久久久www成人免费毛片| 国产黄在线播放免费观看| 亚洲精品在线免费观看视频| 日韩免费高清视频网站|