• <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
    主站蜘蛛池模板: 亚洲无码日韩精品第一页| 在线中文字幕精品第5页| 久久国产精品免费一区| 国产精品特级毛片一区二区三区| 国内精品久久久久久不卡影院| 国产精品宾馆在线精品酒店 | 久久精品不卡| 国产精品一区二区不卡| 无码国内精品人妻少妇蜜桃视频| 精品福利一区二区三区精品国产第一国产综合精品 | 欧美精品整片300页| 国产A∨免费精品视频| 91精品国产乱码久久久久久| 亚洲欧美日韩久久精品第一区| 久久91精品综合国产首页| 伊人久久大香线蕉精品| 91在线视频精品| 国产在线精品一区二区在线观看| 在线中文字幕精品第5页| 日本精品自产拍在线观看中文 | 亚洲国产午夜中文字幕精品黄网站| 国产91精品黄网在线观看| 国产精品大白天新婚身材| 久久国产精品99精品国产| 亚洲日韩欧美制服精品二区| 久久久久人妻一区精品| 国产精品欧美久久久久天天影视| 久久国产精品一区二区| 国产精品v欧美精品v日韩精品| 国产精品拍天天在线| 国产精品无码午夜福利| 国产伦精品免编号公布| 精品一区二区三区无码免费视频| 中文字幕无码精品三级在线电影| 欧美日韩在线精品一区二区三区激情综合| 国产精品五月天强力打造| 国产精品99在线播放| 国产高清在线精品一本大道| 国产高清一级毛片精品| 国产精品美女久久久久av爽 | 亚洲精品无码乱码成人|