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

首頁 > 編程 > JavaScript > 正文

淺析vue數據綁定

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

前言:最近團隊需要做一個分享,腳進腦子,不知如何分享。最后想著之前一直想研究一下 vue 源碼,今天剛好 “借此機會” 研究一下。

網上研究vue數據綁定的文章已經非常多了,但是自己寫一遍,敲一遍demo和看別人的文章是完全不同的,so……搬運工來了

目前數據綁定主要有以下三種實現方式:

1.   臟值檢查(angular.js)    輪詢檢測數據變化

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

  • XHR響應事件 ( $http )
  • 瀏覽器Location變更事件 ( $location )
  • Timer事件( $timeout , $interval )
  • 執行 $digest() 或 $apply()

2、Object.defineProperty劫持對象的get、set,從而實現對數據的監控。 (vue)

3、發布/訂閱者模式實現數據與視圖的自動同步

Object.defineProperty的優點

  • “臟值檢測”――數據發生變更后,對于所有的數據和視圖的綁定關系進行一次檢測,識別是否有數據發生了改變,有變化進行處理,可能進一步引發其他數據的改變,所以這個過程可能會循環幾次,一直到不再有數據變化發生后,將變更的數據發送到視圖,更新頁面展現
  • Object.defineProperty() 監控對數據的操作,可以自動觸發數據同步。并且,由于是在不同的數據上觸發同步,可以精確的將變更發送給綁定的視圖,而不是對所有的數據都執行一次檢測。

Object.defineProperty的用法

var a = {};
Object.defineProperty(a, "b", {
  set: function (newValue) {
  console.log("我被賦值了!" + newValue);
  },
  get: function () {
  console.log("我被取值了!");
  return 2  }
})
a.b = 3; //我被賦值了!
console.log(a.b); //我被取值了! //打印 2

由上面的例子看出,Object.defineProperty  傳人3個參數

第一個: a對象

第二個: a對象里面的b屬性

第三個: 屬性比較多,列舉有用的 value,set,get,configurable

數據綁定原理:

1、實現一個數據監聽器Observer,對數據對象的所有屬性進行監聽,如有變動則拿到最新值并通知 dep數組

2、實現一個指令解析器Compile,對每個元素節點的指令進行掃描和解析,根據指令模板替換數據

3、實現一個dep數組 ,能夠訂閱并收到每個屬性變動的通知,執行指令綁定的相應回調函數,更新視圖

1. 實現observer

var data = {name: 'beidan'};
observe(data);
data.name = 'test'; // 監聽到值變化了 beidan 變成 test

function observe(data) {
  if (!data || typeof data !== 'object') {
  return;
  }
  // 取出所有屬性遍歷
  Object.keys(data).forEach(function(key) {
   defineReactive(data, key, data[key]);
 });}
function defineReactive(data, key, val) {

 Object.defineProperty(data, key, {
 enumerable: true, // 可枚舉
   configurable: false, // 不能再define  get: function() {
     return val;
   },
   set: function(newVal) {
     console.log('監聽到值變化了 ', val, ' 變成 ', newVal);
   val = newVal;
   }
  });}

2. 維護一個數組

function Dep() {
  this.subs = [];}
Dep.prototype = {
  addSub: function (sub) {
  this.subs.push(sub);
  },
  notify: function (val) {
   this.subs.forEach(function (sub) {
    sub.update(val)
  });
 }
};function defineReactive(data, key, val) { Object.defineProperty(data, key, { …… set: function(newVal) {  if (val === newVal) return;  console.log('監聽到值變化了 ', val, ' 變成 ', newVal);  val = newVal;  dep.notify(val); // 通知所有訂閱者  }  });}

3. compile

bindText: function () {
  var textDOMs = this.el.querySelectorAll('[v-text]'),
bindText,_context = this;

  for (var i = 0; i < textDOMs.length; i++) {
   bindText = textDOMs[i].getAttribute('v-text'); textDOMs[i].innerHTML = this.data[bindText];
 var val = textDOMs[i]

  var up = function (text) {
    val.innerText = text
  }
 _context.dep.addSub({
    value: textDOMs[i],
    update: up
  });
  }
},

最后,附上源碼 github   https://github.com/beidan/vue_bind

參考鏈接:

//www.49028c.com/article/103297.htm

//www.49028c.com/article/99129.htm

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品偷拍各种wc美女嘘嘘| 国产在线观看精品一区二区三区| 久久国产精品网站| 一区二区三区亚洲| 国产精品嫩草影院久久久| 青青精品视频播放| 亚洲精品永久免费精品| 欧美激情性做爰免费视频| 亚洲欧美精品中文字幕在线| 亚洲成人三级在线| 欧美日韩国产丝袜另类| 久久精品中文字幕电影| 92国产精品久久久久首页| 欧美性开放视频| 久久久久日韩精品久久久男男| 蜜月aⅴ免费一区二区三区| 国产精品免费久久久久影院| 国产精品日日做人人爱| 黄网动漫久久久| 亚洲国产成人精品久久| 在线电影av不卡网址| 欧美日韩国产中文精品字幕自在自线| 国产亚洲精品久久久久久| 久久久国产成人精品| 亚洲一区二区中文字幕| 国产伦精品一区二区三区精品视频| 亚洲va欧美va国产综合久久| 欧美成人午夜影院| 亚洲精品ady| 伊人久久久久久久久久| 欧美与黑人午夜性猛交久久久| 亚洲a在线观看| 91理论片午午论夜理片久久| 久久久久成人网| 久久男人资源视频| 热久久免费国产视频| 日韩av电影手机在线观看| 懂色av一区二区三区| 自拍偷拍亚洲一区| 精品香蕉在线观看视频一| 久久精品99久久久久久久久| 国产69精品久久久久9| 国产美女久久精品香蕉69| 97人洗澡人人免费公开视频碰碰碰| 性欧美xxxx视频在线观看| 亚洲色图日韩av| 亚洲第一男人av| 日韩人在线观看| 亚洲精品成人久久久| 欧美激情一区二区三级高清视频| 中文字幕亚洲综合久久筱田步美| 黄色成人av网| 成人国产精品免费视频| 久久综合国产精品台湾中文娱乐网| 亚洲黄色在线看| 国产精品久久久久久久久久久久久| 欧美三级欧美成人高清www| 日本最新高清不卡中文字幕| 亚洲欧美国产精品久久久久久久| 国内精品久久久久久中文字幕| 亚洲黄色在线看| 久久精品视频在线| 国产亚洲精品美女久久久久| 欧美国产亚洲精品久久久8v| 国产亚洲欧洲高清| 亚洲美女自拍视频| 亚洲跨种族黑人xxx| 欧美日韩成人在线播放| 色七七影院综合| 精品久久久免费| 亚洲免费人成在线视频观看| 色在人av网站天堂精品| 欧美成人午夜激情视频| 国产玖玖精品视频| 国产精品极品尤物在线观看| 91夜夜未满十八勿入爽爽影院| 亚洲欧美三级在线| 国产精品午夜国产小视频| 亚洲综合社区网| 欧美激情精品久久久| 国内成人精品视频| 国产97色在线|日韩| 久久夜色精品国产亚洲aⅴ| 亚洲久久久久久久久久| 久久av中文字幕| 中日韩美女免费视频网址在线观看| 91在线高清免费观看| 欧美大成色www永久网站婷| 亚洲深夜福利视频| 97婷婷大伊香蕉精品视频| 亚洲电影免费观看高清完整版| 国产视频精品在线| 麻豆国产va免费精品高清在线| 国产在线精品播放| 国产日韩在线播放| 亚洲xxxx妇黄裸体| 亚洲一区二区三区sesese| 久久精品电影网| 国模gogo一区二区大胆私拍| 欧美日韩久久久久| 久久精品国产久精国产一老狼| 尤物yw午夜国产精品视频| 久久亚洲一区二区三区四区五区高| 日韩av一区二区在线| 欧美日韩午夜视频在线观看| 最近的2019中文字幕免费一页| 欧美专区福利在线| 神马国产精品影院av| 成人在线免费观看视视频| 欧美综合国产精品久久丁香| 日韩中文字幕视频在线观看| 欧美午夜视频一区二区| 国产欧美久久久久久| 亚洲福利在线视频| 伊人伊人伊人久久| 国产91精品不卡视频| 国产成人自拍视频在线观看| 欧美刺激性大交免费视频| 国产精品福利在线| 91成人在线播放| 久久久国产视频| 亚洲第一精品夜夜躁人人躁| 美女视频黄免费的亚洲男人天堂| 亚洲激情视频在线播放| 国产免费一区二区三区在线能观看| 久久视频国产精品免费视频在线| 国产精品av在线播放| 成人免费网站在线看| 97免费视频在线播放| 久久天天躁日日躁| 日韩成人在线播放| 91大神福利视频在线| 国产成人精品免费视频| 欧美性极品xxxx做受| 国产成人精品久久亚洲高清不卡| 日本成人激情视频| 国产精品亚洲自拍| 日韩精品久久久久久久玫瑰园| 国产精品高潮呻吟久久av野狼| 欧美亚洲另类激情另类| 亚洲天堂av高清| 日韩中文字幕在线视频播放| 精品国产区一区二区三区在线观看| 精品国产一区二区三区久久| 欧美激情手机在线视频| 国产精品久久久久999| 精品福利视频导航| 欧美精品在线免费观看| 国产成人精品一区二区三区| 国产精品情侣自拍| 精品国产91久久久| 久久久这里只有精品视频| 国产欧美一区二区三区在线看| 欧美另类交人妖| 日韩黄色在线免费观看| 久久精品2019中文字幕| 久久精品国产视频| 欧美丰满片xxx777| 亚洲天堂色网站| 色偷偷偷综合中文字幕;dd| 性色av一区二区三区| 日韩一区二区在线视频| 欧美另类精品xxxx孕妇| 中文字幕在线精品|