前言
努力学习,每天进步一点。
Vue的双向绑定
核心
Object.defineProperty()方法
原理
通过Object.defineProperty()来劫持各个属性的Setter,gette,在数据发生变动时通知Vue实例,触发相
应的getter和setter回调函数。当把一个普通JS对象传给Vue实例来作为它的data选项时,Vue将遍历它的
属性,用Object.defineProperty将它们转为getter/setter。用户看不到getter/setter,但是在内部
它们让Vue追踪依赖,在属性被访问和修改时通知变化。
特点
Vue是数据双向绑定将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,
通过Observer来监听自己的mode的数据变化,通过Compile来解析编译指令
(vue中是用来解析{{}}),最终利用watcher塔起observer和Compile之间的通信桥梁,
达到数据变化->石头交互变化(input)->数据model变更双向绑定效果。
这就是通过数据劫持和发布-订阅者功能来实现的
代码实现
<body>
<div id="app">
<input type="text" id='yeye'>
<p id='show'></p>
</div>
</body>
<script type="text/javascript">
var obj={}
Object.defineProperty(obj,'yeye,{
get:function(){
return obj
},
set:function(newValue){
document.getElementById('yeye'.value=newValue
document.getElementById('show').innerHTML=newValue
}
})
document.addEventListener('keyup',function(e){
obj.yeye=e.target.value
})
总结
今天就是认真的看了一下vue.js 的文档,然后去熟悉一下Vue的绑定原理