一、什么vue
(一)vue渐进式JavaScript框架
(二)特点:数据进行驱动(mvvm)
(三)两大核心:虚拟DOM,双向绑定
(一)那么什么是渐进式框架呢
简单的来讲渐进式框架就是 你用什么就可以拿什么
在上面和张图里可以看到vue的一些核心功能,但是你同样不必引入所有的模块进行工作,
你可以只用v-model等一些简单的指令进行使用,vue不强求你一次性接受并使用它的全部功能特性
(二) 数据进行驱动(mvvm)
vue是如何用数据进行驱动的呢?
- vuejs帮我们封装了数据和dom对象操作的映射,我们只需要关心数据的逻辑处理,数据的变化就能够自然的通知页面进行页面的重新渲染。
- Vuejs的数据驱动是通过MVVM这种框架来实现的。MVVM框架主要包含3个部分:model、view和 viewmodel。数据(Model)和视图(View)是不能直接通讯的,而是需要通过ViewModel来实现双方的通讯。当数据变化的时候,viewModel能够监听到这种变化,并及时的通知view做出修改。同样的,当页面有事件触发时,viewModel也能够监听到事件,并通知model进行响应。
能看出来Viewmodel就相当于一个观察者,监控着双方的动作,并及时通知对方进行相应的操作。
那么问题来了vue里面是如何进行观察的model 和 view的呢
首先,vuejs在实例化的过程中,会遍历传给实例化对象选项中的data 选项,遍历其所有属性并使用 Object.defineProperty 把这些属性全部转为 getter/setter。
同时每一个实例对象都有一个watcher实例对象,他会在模板编译的过程中,用getter去访问data的属性,watcher此时就会把用到的data属性记为依赖,这样就建立了视图与数据之间的联系。当之后我们渲染视图的数据依赖发生改变(即数据的setter被调用)的时候,watcher会对比前后两个的数值是否发生变化,然后确定是否通知视图进行重新渲染。
这样就实现了所谓的数据对于视图的驱动。通俗地讲,它意味着我们在普通 HTML 模板中使用特殊的语法将 DOM “绑定”到底层数据。一旦创建了绑定,DOM 将与数据保持同步。每当修改了数据,DOM 便相应地更新。这样我们应用中的逻辑就几乎都是直接修改数据了,不必与 DOM 更新搅在一起。这让我们的代码更容易撰写、理解与维护。