Vue雙向數據綁定的效果的實現,用js實現效果,我覺得是觸發後使用setInterval()刷新實現的,今天沒事瞭解一下:vue
實現雙向數據綁的方法:angularjs
1.發佈者—訂閱者模式(backbone.js);瀏覽器
object.observe() 瀏覽器已廢棄;app
2.髒值檢查(anguar.js);性能
指定事件(ng-click/$http/$location/$interval/$digest(只觸發當前及子做用域的監控)||$apply(可參數,做用域樹上全部監控,推建使用)...)觸發時進入髒值檢測view和model是否變化,決定同步更新,經過$watch/setInterval()定時輪詢檢測數據變更;形象的例子解釋髒檢查機制:雙向綁定
======"髒檢查機制"(dirty-checking)===========事件
$digest:「嘿,watcher1,你的值是什麼?」backbone
watcher1:"是 ‘ngBook’。"作用域
$digest:「好的,你的值改變過嗎?(髒了嗎?)」同步
watcher1:"沒有,$digest先生。"
$digest(心想):這個watcher1的沒改變過,那咱們繼續下一個吧。
.......
$digest:「嘿,watcher2,你的值是什麼?」
watcher2:"報告,是 ‘破狼’。"
$digest:「剛纔被改變嗎?」
watcher2:"已經被改變過了,剛纔的值是‘雪狼’,正等待你的到來呢"
$digest(心想):很好,看來咱們的DOM一會須要更新了。
...繼續watcher3/4/5...的詢問、檢查....最後遍歷所改變的watcher。
缺點:遍歷輪詢watcher消耗性能,特別是單頁面監控數量達到很大數量時候。
=================
$digest和$apply
angularjs雙向數據綁定原理
3.數據劫持;
object.defineProperty()
vue的雙向綁定原理及實現
剖析Vue原理&實現雙向綁定MVVM