• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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雙向數據綁定原理探究

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

    vue雙向數據綁定原理探究

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

    雙向綁定的思想

    雙向數據綁定的思想就是數據層與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>

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    vue雙向數據綁定原理探究

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

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲精品国产日韩无码AV永久免费网 | 99热日韩这里只有精品| 亚洲精品成人a在线观看| 国产精品美女免费视频观看| 99re热这里只有精品视频中文字幕 | 国产欧美精品区一区二区三区| 国产亚洲欧美精品久久久| 在线精品视频一区二区| 97精品久久天干天天天按摩| 欧美日韩专区麻豆精品在线 | 日韩精品欧美亚洲| 国产三级精品三级在线观看专1| 91麻豆精品视频| 久久综合国产乱子伦精品免费| 日韩一区二区精品观看| 精品午夜福利1000在线观看| 91精品视频观看| 97精品国产高清自在线看超 | 亚洲日韩一页精品发布| 拍国产真实乱人偷精品| 精品乱子伦一区二区三区| 国产偷国产偷高清精品| 国产精品videossex白浆| 91精品婷婷国产综合久久| 青青草国产精品久久| 欧美日韩成人精品久久久免费看| segui久久国产精品| 亚洲国产精品线在线观看| 欧美成人精品一级高清片| 欧美精品免费在线| 午夜精品美女写真福利| 欧洲精品视频在线观看| 亚洲国产综合精品中文第一区| 日韩精品国产自在久久现线拍| 欧美大片日韩精品| 99精品国产成人一区二区| 国产精品黄页免费高清在线观看| 2024最新国产精品一区| 国产精品小视频免费无限app | 免费精品视频在线| 天天爽夜夜爽夜夜爽精品视频|