文档介绍:,它是一个典型的MVVM框架,模型(Model)只是普通的JavaScript对象,修改它则视图(View)会自动更新。这种设计让状态管理变得非常简单而直观,不过理解它的原理也很重要,可以避免一些常见问题。,。如何追踪变化我们先来看一个简单的例子。代码示例如下:<divid="main"><h1>count:{{times}}</h1></div><scriptsrc=""></script><script>varvm=newVue({el:'#main',data:function(){return{times:1};},created:function(){varme=this;setInterval(function(){++;},1000);}});</script>运行后,我们可以从页面中看到,count后面的times每隔1s递增1,视图一直在更新。,并没有任何DOM操作。?我们可以通过一张图来看一下,如下图所示:图中的模型(Model)就是data方法返回的{times:1},视图(View)是最终在浏览器中显示的DOM。模型通过Observer、Dep、Watcher、Directive等一系列对象的关联,最终和视图建立起关系。归纳起来,:通过Observer对data做监听,并且提供了订阅某个数据项变化的能力。把template编译成一段documentfragment,然后解析其中的Directive,得到每一个Directive所依赖的数据项和update方法。通过Watcher把上述两部分结合起来,即把Directive中的数据依赖通过Watcher订阅在对应数据的Observer的Dep上。当数据变化时,就会触发Observer的Dep上的notify方法通知对应的Watcher的update,进而触发Directive的update方法来更新DOM视图,最后达到模型和视图关联起来。。。我们知道,Vue实例创建的过程会有一个生命周期,。initData方法的源码定义如下:<!-源码目录:src/instance/internal/-->=function(){vardataFn=this.$==dataFn?dataFn():{}if(!isPlainObject(data)){data={}!=='production'&&warn('datafunctionsshouldreturnanobject.',this)}varprops=//proxydataoninstancevarkeys=(data)vari,keyi=(i--){key=keys[i]//therearetwoscenarioswherewecanproxyadatakey://'snotalreadydefinedasaprop//'sprovidedviaainstantiationoptionANDthereareno//templateproppresentif(!props||!hasOwn(props,key)){(key)}elseif(!=='production'){warn('Datafield"'+key+'"isalreadydefined'+',usethe"default"'+'propoption;ifyouwanttopasspropvaluestoaninstantiation'+'call,usethe"propsData"option.',this)}}//observedataobserve(data,this)}在initData中我们要特别注意proxy方法,它的功能就是遍历data的key,把data