MVVM是 Model View ViewModel 的缩写。这种模式的优势是:改变js中的数据,dom结构就会跟着变化,不用再手动修改dom。html
Model是数据,view即dom,ViewModel是让Model和View通讯用的。vue
MVVM的设计思想是:关注Model的变化,让MVVM框架去自动更新DOM,从而把开发者从操做DOM的繁琐步骤中解脱出来!app
view和model没法直接通讯,他们经过viewModel来通讯,viewModel作了2件事:框架
计数器的源码以下:dom
<div id="app"> <h2>当前计数: {{counter}}</h2> <button v-on:click="add">+</button> <button v-on:click="sub">-</button> </div> <script src="../js/vue.js"></script> <script> const app = new Vue({ el: '#app', data: { counter: 0, message: 'abc' }, methods: { add: function () { console.log('add被执行'); this.counter++ }, sub: function () { console.log('sub被执行'); this.counter-- } } }) </script>
在这个计数器示例里面,dom是view,model就是咱们在data属性里写的值,是一个对象。为了让这个model显示的更直观更清晰,咱们把数据单独拎出来写:函数
<script> //把数据写在vue实例外面。 const obj = { counter: 0, message: 'abc' } const app = new Vue({ el: '#app', data: obj, methods: { add: function () { console.log('add被执行'); this.counter++ //这里虽然数据写在实例外面,可是this也能够读取到,由于vue在这里作了一个代理,后面会讲到 }, sub: function () { console.log('sub被执行'); this.counter-- } } }) </script>
咱们建立的那个vue实例new Vue()
,就是ViewModel,让Model和View能够进行通讯。this