大纲 前言 MVVM 思想 M
:即 Model(模型),包括数据和一些基本操作V
:即 View(视图),页面的渲染结果VM
:即 View-Model
,模型与视图间的双向操作(无需开发人员干涉)在 MVVM 之前,开发人员从后端获取需要的数据模型,然后要通过 DOM 操作 Model 渲染到 View 中。当用户操作视图后,开发人员还需要通过 DOM 获取 View 中的数据,然后同步到 Model 中。而 MVVM 中的 VM
要做的事情就是把 DOM 操作完全封装起来,开发人员不用再关心 Model 和 View 之间是如何互相影响的。这样可以将开发人员从繁琐的 DOM 操作中解放出来,把关注点放在如何操作 Model 上。
一旦 Model 发生了改变,View 上自然就会呈现出来 当用户修改了 View,Model 中的数据也会跟着改变
Vue 简介 Vue (读音 /vjuː/
,类似于 view
) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。更多的 Vue 介绍可参考 Vue v2 中文官网 、Vue GitHub 项目 。
Vue 安装 Script 方式安装 可以直接下载 Vue 的 JS 文件,然后使用 <script>
标签引入,Vue 会被注册为一个全局变量。
CDN 方式安装 1 2 3 4 5 <script src ="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js" > </script > <script src ="https://cdn.jsdelivr.net/npm/vue@2.7.10" > </script >
若使用了原生 ES Modules,这里也有一个兼容 ES Module 的构建文件:
1 2 3 <script type="module" > import Vue from 'https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.esm.browser.js' </script>
NPM 方式安装 NPM 安装步骤 初始化 NodeJs 项目,会自动生成 package.json
和 package-lock.json
文件
给 NodeJs 项目安装 Vue,安装完成后项目下会多出 node_modules
目录
1 2 3 4 5 $ npm install vue $ npm install vue@2.7.10
不同构建版本的说明 在 NPM 包的 dist 目录 你将会找到很多不同的 Vue.js
构建版本。这里列出了它们之间的差别:
UMD CommonJS ES Module (基于构建工具使用) ES Module (直接用于浏览器) 完整版 vue.js vue.common.js vue.esm.js vue.esm.browser.js 只包含运行时版 vue.runtime.js vue.runtime.common.js vue.runtime.esm.js - 完整版 (生产环境) vue.min.js - - vue.esm.browser.min.js 只包含运行时版 (生产环境) vue.runtime.min.js - - -
完整版 :同时包含编译器和运行时的版本。
编译器 :用来将模板字符串编译成为 JavaScript 渲染函数的代码。
运行时 :用来创建 Vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。
UMD :UMD 版本可以通过 <script>
标签直接用在浏览器中。CDN 的 https://cdn.jsdelivr.net/npm/vue@2.7.10 默认文件就是运行时 + 编译器的 UMD 版本 (vue.js
)。
CommonJS :CommonJS 版本用来配合老的打包工具比如 Browserify 或 Webpack 1 。这些打包工具的默认文件 (pkg.main
) 是只包含运行时的 CommonJS 版本 (vue.runtime.common.js
)。
ES Module :从 2.6 开始 Vue 会提供两个 ES Modules (ESM) 构建文件:
为打包工具提供的 ESM:为诸如 Webpack 2 或 Rollup 提供的现代打包工具。ESM 格式被设计为可以被静态分析,所以打包工具可以利用这一点来进行 tree-shaking
并将用不到的代码排除出最终的包。为这些打包工具提供的默认文件 (pkg.module
) 是只有运行时的 ES Module 构建 (vue.runtime.esm.js
)。
为浏览器提供的 ESM (2.6+):用于在现代浏览器中通过 <script type="module">
直接导入。
Vue 快速入门 Vue 简单使用说明
使用 Vue 实例管理 DOM DOM 与数据 / 事件等进行相关绑定 开发者只需要关注数据、事件等处理,无需关心视图如何进行更新 声明式渲染 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Vue</title > </head > <body > <div id ="app" > <h1 > Hello {{name}} </h1 > </div > <script src ="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js" > </script > <script > let app = new Vue({ el : "#app" , data : { name : "Jack" } }); </script > </body > </html >
首先通过 new Vue()
来创建 Vue 实例 然后 Vue 的构造函数接收一个对象,对象中有一些属性el
:是 element
的缩写,通过 id
选中要渲染的页面标签,在本案例里选中了一个 DIV 标签data
:数据,数据是一个对象,里面有很多自定义的属性,都可以渲染到视图中 最后在页面的 h1
标签中,通过 {{name}}
的方式,来渲染刚刚定义的 name
属性 代码运行效果
使用 Vue 的声明式渲染,上述 HTML 代码运行后的效果如下,打开浏览器的 JavaScript 控制台,通过执行 app.name='Peter'
来改变模型,将看到视图会相应地更新
单向绑定 单向绑定,也就是模型变化会引起视图变化(渲染),但是反过来就不行。
v-bind 指令 使用 v-bind
指令绑定 HTML 标签的 attribute(属性)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > </head > <body > <div id ="app" > <span v-bind:title ="message" > 鼠标悬停几秒钟,查看此处动态绑定的提示信息! </span > </div > <script src ="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js" > </script > <script > let app = new Vue({ el : '#app' , data : { message : '页面加载于 ' + new Date ().toLocaleString() } }); </script > </body > </html >
双向绑定 双向绑定,也就是模型变化会引起视图变化(渲染),反之亦然。
v-model 指令 使用 v-model
指令进行双向绑定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > </head > <body > <div id ="app" > <label > Please input a number: </label > <input type ="text" v-model ="number" > <h1 > Hello {{name}}, you {{number}} have books</h1 > </div > <script src ="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js" > </script > <script > let app = new Vue({ el : "#app" , data : { name : "Jack" , number : "1" } }); </script > </body > </html >
代码运行效果
使用 v-model
指令进行双向绑定,上述 HTML 代码运行后的效果如下,页面上显示的数字会随输入框的内容一起变化
事件绑定 v-on 指令 使用 v-on
指令绑定点击事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > </head > <body > <div id ="app" > <button v-on:click ="number++" > Add Books</button > <h1 > Hello {{name}}, you have {{number}} books</h1 > </div > <script src ="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js" > </script > <script > let app = new Vue({ el : "#app" , data : { name : "Jack" , number : "1" } }); </script > </body > </html >
或者在 Vue 实例中定义方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > </head > <body > <div id ="app" > <button v-on:click ="add" > Add Books</button > <h1 > Hello {{name}}, you have {{number}} books</h1 > </div > <script src ="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js" > </script > <script > let app = new Vue({ el : "#app" , data : { name : "Jack" , number : "1" }, methods : { add () { this .number++; } }, }); </script > </body > </html >
代码运行效果
使用 Vue 的点击事件绑定,上述 HTML 代码运行后的效果如下,点击按钮后,页面上显示的数字会递增
Vue 开发工具 VSCode 插件 Vetur
- Vue 语法高亮、智能感知、Emmet 等Vue 3 Snippets
- Vue2、Vue3 代码片段快速生成Chrome 浏览器调试插件 应用商店安装 访问 Chrome 应用商店(依赖科学上网),然后在搜索框搜索 Vue Devtools
,最后直接点击插件进行安装即可。
源码编译安装 1 2 3 4 5 6 7 8 9 10 11 $ git clone https://github.com/vuejs/vue-devtools $ cd vue-devtools $ npm install $ npm run build
编译打包成功后会在 shells
下生成 chrome
文件夹,此文件夹就是用来存放编译打包生成的 Chrome 扩展程序。
打开 Chrome 浏览器 > 更多工具 > 扩展程序 > 打开开发者模式,点击加载已解压的扩展程序,找到刚才生成的 chrome
文件夹,选择 vue-devtools > shells > chrome 放入,安装成功后的截图如下:
插件使用说明 Chrome 浏览器打开 Vue 项目的页面后,按下快捷键 F12
,点击选择 vue
标签页就可以开始使用插件了