[TOC]

01、基本概念

先了解下MVVM

VUE是基于MVVM思想实现的,那什么是MVVM呢?
MVVM,是Model-View-ViewModel的缩写,是一种软件架构模式。其核心思想就是分离视图、数据、逻辑,VUE框架解决了数据**Model**到视图**View**的双向绑定,我们只关注业务逻辑**ViewModel**即可,极大的提高的编程效率。

  • M:Model,数据模型,通常来自后端服务、数据库。
  • V:View,视图,就是HTML页面,Dom。
  • VM:ViewModel,视图模型,连接模型和视图,实现数据和视图的相互绑定。包含了视图状态、行为,如页面展示的内容(逻辑)、页面响应事件、数据获取更新等,都封装在 ViewModel 中。

Vue2快速上门(1)-基础知识 - 图1
VUE实现双向绑定的基本原理:
🔸Dom Listeners:通过对DOM元素(表单输入元素)的值变更监听,同步视图变化的数据到模型。
🔸Data Bindings:通过对模型数据拦截监听,监测数据变化进行更新视图。原理是基于基于ES5的特性Object.**defineProperty**(obj, propertyName, descriptor),通过其get、set访问器来监听数据变更。这也是Vue不支持IE8的原因。
一个双向绑定的简单示例:

<div id="app">
        <h2>{{message}}--{{message}}</h2>
</div>
<form action="#">
        <input type="text" v-model="message">
</form>
<script>
        //定义一个数据ViewModel,数据实际存储在$data中。
        let app = {
                $data: {}
        }

        //通过defineProperty的get、set拦截,检测数据变化》更新数据
        Object.defineProperty(app, "message", {
                get() { return this.$data.message; },
                set(value) {
                        this.$data.message = value;
                        updateView(this);  //更新视图
                }
        })
        //保存模板、绑定了数据的表单元素
        let template = document.querySelector("#app").innerHTML;
        let vinputs = document.querySelectorAll("input[v-model]");
        //更新视图
        function updateView(data) {
                const html = template.replace(/{{(\w+)}}/g, (match, $1) => {
                        return data[$1] || "";
                })
                document.querySelector("#app").innerHTML = html;
                //更新表单元素的数据绑定
                vinputs.forEach(el => {
                        el.value = data[el.getAttribute('v-model')];
                });
        }

        //监听输入表单的值变更
        vinputs.forEach(el => {
                el.addEventListener("input", function (e) {
                        app[e.target.getAttribute('v-model')] = e.target.value;
                });
        });

        //赋值
        app.message = "hello";
</script>

1.gif

虚拟DOM

直接操作DOM,DOM频繁变动会使得页面不停的布局、渲染,是很消耗性能的,虚拟DOM 就是来解决这个问题的。
虚拟DOM 就是先在内存中构建一个虚拟DOM结构(JS对象表示),批量操作完成后再一次性的更新到浏览器DOM树上。VUE中的虚拟DOM操作思路也是如此,只是为了更高效,实际要稍微复杂一点点。

  • ❶ 用JS 对象模拟 虚拟DOM树
  • ❷ 比较DOM树差异(修改、删除、新增…)
  • ❸ 将差异更新到真正的DOM树中。

    VUE是什么?

    中文官网https://cn.vuejs.org Vue3版本手册 | Vue2版本手册
    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架,同他周边的生态共同构成了一个灵活的、渐进式的前端框架。

  • 2013年底作为尤雨溪个人实验项目开始开发

  • 2014年公开发布。
  • 2016年10月发布2.0版本。
  • 2020年发布3.0版本。

🔸核心特性

  • 响应式数据驱动(双向绑定),数据>视图(数据监听),视图>数据(事件监听)。
  • 组件化:组件化的应用构建.
  • 申明式渲染:采用模板语法来申明式的将数据渲染到DOM。
  • 轻量级框架:只关注视图层,是一个构建数据的视图集合,压缩后33K;
  • 高效率:基于虚拟化Dom技术,DOM操作效率很高。

    Vue生态

    //

    02、准备开始

    直接使用

    通过