软件培训 – VUE
一:Vue 的安装与使用
1.1 script 引入
下载 vue.js 文件然后 script 引入
1 | <script src="./vue.js"></script> |
可以使用 CDN 来引入
1 | <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> |
1.2 使用 vue-cli 来开发
1 | yarn global add vue |
二: 指令的学习
2.1 v-text 和 插值表达式的学习
2.1.1 插值表达式
数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:
1 | <body> |
Mustache 标签将会被替代为对应数据对象上 msg
property 的值。无论何时,绑定的数据对象上 msg
property 发生了改变,插值处的内容都会更新。
同时可以 在插值表达式中 使用 JavaScript 表达式
1 | {{ number + 1 }} |
2.2.2 v-text 指令
1 | <span v-text="message"></span> |
2.2 v-bind 的使用
Mustache 语法不能作用在 HTML attribute 上,遇到这种情况应该使用 v-bind
指令:
动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。
1 | <body> |
2.3 v-modal 的使用
你可以用 v-model
指令在表单 <input>
、<textarea>
及 <select>
元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model
本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
1 | <div id="app"> |
2.4 v-if 的学习 (条件渲染)
v-if
指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。
1 | <div id="app"> |
2.5 v-show 的使用
1 | // 另一个用于根据条件展示元素的选项是 v-show 指令。用法大致一样: |
2.6 v-for 的使用(列表渲染)
我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。
为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key attribute:
(Very Important)
1 | <div id="app" > |
2.7 v-on的使用 (事件处理)
可以用 v-on
指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。
绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。
1 | <body> |
JS原生事件参考: https://developer.mozilla.org/zh-CN/docs/Web/Events
2.8 动态绑定 Class
1 | // 我们可以传给 v-bind:class 一个对象,以动态地切换 class: |
三: 计算属性与 侦听器
如果有一个需求是 根据用户输入的值来实时更新 界面上的展示值,这时就引入 计算属性和 侦听器。
计算属性是基于它们的响应式依赖进行缓存的
侦听属性。侦听某一个数据,假如这一个数据改变那么就会执行相应的操作
3.1 计算属性
1 | <div id="example"> |
3.2 侦听属性(一般用在侦听数据改变然后查询数据)
1 | <body> |
四: 过滤器(v3版本弃用)
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind
表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:
1 | <!-- 在双花括号中 --> |
你可以在一个组件的选项中定义本地的过滤器:
1 | filters: { |
这一个功能可以用 函数 替换掉
1 | <!-- 在双花括号中 --> |
五: 生命周期
1 | <!DOCTYPE html> |
通过上述测试我们可以知道,
生命周期 | 是否获取dom节点 | 是否可以获取data | 是否获取methods |
---|---|---|---|
beforeCreate | 否 | 否 | 否 |
created | 否 | 是 | 是 |
beforeMount | 否 | 是 | 是 |
mounted | 是 | 是 | 是 |
以我的个人理解,vue生命周期实际上和浏览器渲染过程是挂钩的,
在beforecreate阶段,对浏览器来说,整个渲染流程尚未开始或者说准备开始,对vue来说,实例尚未被初始化,data observer和 event/watcher也还未被调用,在此阶段,对data、methods或文档节点的调用现在无法得到正确的数据。
在created阶段,对浏览器来说,渲染整个HTML文档时,dom节点、css规则树与js文件被解析后,但是没有进入被浏览器render过程,上述资源是尚未挂载在页面上,也就是在vue生命周期中对应的created
阶段,实例已经被初始化,但是还没有挂载至$el上,所以我们无法获取到对应的节点,但是此时我们是可以获取到vue中data与methods中的数据的
在beforeMount阶段,实际上与created阶段类似,节点尚未挂载,但是依旧可以获取到data与methods中的数据。
在mounted阶段,对浏览器来说,已经完成了dom与css规则树的render,并完成对render tree进行了布局,而浏览器收到这一指令,调用渲染器的paint()在屏幕上显示,而对于vue来说,在mounted阶段,vue的template成功挂载在$el中,此时一个完整的页面已经能够显示在浏览器中,所以在这个阶段,即可以调用节点了(关于这一点,在笔者测试中,在mounted方法中打断点然后run,依旧能够在浏览器中看到整体的页面)。
六: 相关材料
6.1 Vue2 的开发文档
https://cn.vuejs.org/v2/guide/
6.2 Vue的原理剖析
https://wenku.baidu.com/view/ef0160ea7cd184254b3535ff.html?fr=search-1
七: 作业
7.1 写一个计算器
- 最低要求 写出如图所示 计算器
- 拔高一:记录 计算信息 并可以回滚
- 拔高二: 有括号的运算
- 拔高三: 有三角函数的运算
- 参考Windows 计算器