1. 生命周期
什么是生命周期:从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!
生命周期钩子:就是生命周期事件的别名而已;生命周期钩子 = 生命周期函数 = 生命周期事件
主要的生命周期函数分类:
创建期间的生命周期函数:
- beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性
- created:实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始编译模板
- beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面中
- mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示
运行期间的生命周期函数:
- beforeUpdate:状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的数据还是旧的,因为此时还没有开始重新渲染DOM节点
- updated:实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了!
销毁期间的生命周期函数:
- beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。
- destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
1 | <script> |
2. vue-resource 实现 get, post, jsonp请求
2.1 引用
直接在页面中,通过script
标签,引入 vue-resource
的脚本文件;
注意:引用的先后顺序是:先引用 Vue
的脚本文件,再引用 vue-resource
的脚本文件;
1 | <head> |
2.2 发起get请求
1 | getInfo() { // 发起get请求 |
2.3 发送post请求
1 | postInfo() { |
2.4 发送JSONP请求
1 | jsonpInfo() { // 发起JSONP 请求 |
2.5 全局配置请求路径
如果我们通过全局配置了请求的数据接口根域名,则在每次单独发起 http 请求的时候,请求的 url 路径,应该以相对路径开头,前面不能带 / ,否则不会启用根路径做拼接;
1 | <script> |
3. 动画
动画能够提高用户的体验,帮助用户更好的理解页面中的功能;
3.1 不使用动画
1 | <div id="app"> |
3.2 使用过渡类名实现动画
1 | <div id="app"> |
3.3 修改v-前缀
1 | <div id="app"> |
3.4 使用第三方 CSS 动画库
1、导入动画类库
1 | <link rel="stylesheet" type="text/css" href="./lib/animate.css"> |
2、定义 transition 及属性
1 | <!-- 使用 :duration="{ enter: 200, leave: 400 }" 来分别设置 入场的时长 和 离场的时长 --> |
3.5 使用动画钩子函数
1、定义 transition 组件以及三个钩子函数:
1 | <div id="app"> |
- 定义三个 methods 钩子方法:
1 | <script> |
- 定义样式:
1 | .ball { |
3.6 列表动画
1 | <!-- <ul> --> |
<transition-group>
组件还有一个特殊之处。不仅可以进入和离开动画,还可以改变定位。要使用这个新功能只需了解新增的 v-move
特性,它会在元素的改变定位的过程中应用。
1 | <style> |
4. 组件
什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可;
组件化和模块化的不同:
- 模块化: 是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一;
- 组件化: 是从UI界面的角度进行划分的;前端的组件化,方便UI组件的重用;
4.1 组件定义的三种方式:
1、使用 Vue.extend 配合 Vue.component 方法
1 | <div id="app"> |
2、直接使用 Vue.component 方法
1 | <div id="app"> |
3、引用template标签
1 | <div id="app"> |
注意: 组件中的DOM结构,有且只能有唯一的根元素(Root Element)来进行包裹!
4.2 私有组件
1 | <div id="app2"> |
4.3 组件中展示数据和响应事件
1 | <div id="app"> |
5. 组件切换
5.1 flag
标识符结合v-if
和v-else
1 | <div id="app"> |
5.2 使用Vue提供的compoent
1 | <div id="app"> |
5.3 切换动画
1 | <!-- 通过 mode 属性,设置组件切换时候的 模式 --> |
6. 组件传值
6.1 父组件向子组件传值
1 | <div id="app"> |
6.2 父组件向子组件传递方法
子组件向父组件传值
原理:父组件将方法的引用,传递到子组件内部,子组件在内部调用父组件传递过来的方法,同时把要发送给父组件的数据,在调用方法的时候当作参数传递进去;
1 | <div id="app"> |
7. 使用ref获取DOM元素和组件引用
1 | <div id="app"> |
8. 路由
后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;
前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;
在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);
8.1 在 vue 中使用 vue-router
8.1.1 导入 vue-router 组件类库
1 | <script src="./lib/vue-2.4.0.js"></script> |
8.1.2 创建组件的模板对象
1 | // 组件的模板对象 |
8.1.3 创建一个路由对象
当 导入 vue-router 包之后,在 window 全局对象中,就有了一个 路由的构造函数,叫做 VueRouter
1 | // 在 new 路由对象的时候,可以为 构造函数,传递一个配置对象 |
8.1.4 创建 Vue 实例,得到 ViewModel
1 | // 创建 Vue 实例,得到 ViewModel |
8.1.5 使用 router-link 组件来导航
1 | <!-- <a href="#/login">登录</a> --> |
8.1.6 使用 router-view 组件来显示匹配到的组件
1 | <!-- 这是 vue-router 提供的元素,专门用来 当作占位符的,将来,路由规则,匹配到的组件,就会展示到这个 router-view 中去 --> |
8.2 使用tag属性指定router-link渲染的标签类型
1 | <!-- router-link 默认渲染为一个a 标签 --> |
8.3 设置路由重定向redirect
1 | routes: [ // 路由匹配规则 |
8.4 设置路由高亮router-link-active
1 | <style> |
8.5 设置路由切换动效
1 | <style> |
9. 在路由规则中定义参数
9.1 通过 this.$route.query
来获取路由中的参数
1 | <!-- 如果在路由中,使用 查询字符串,给路由传递参数,则 不需要修改 路由规则的 path 属性 --> |
9.2 通过 this.$route.params
来获取路由中的参数
1 | <!-- 如果在路由中,使用 查询字符串,给路由传递参数,则 不需要修改 路由规则的 path 属性 --> |
10. 路由嵌套
10.1 定义组件
1 | <template id="tmpl"> |
10.2 定义router
1 | var router = new VueRouter({ |
11. 命名视图实现经典布局
1 | <div id="app"> |
12. 监听
12.1 methods keyup事件监听
1 | <div id="app"> |
12.2 watch监听
1 | <div id="app"> |
12.3 监视路由地址的改变
1 | // 3. 创建一个路由对象 |
12.4 computed-计算属性的使用
1 | <div id="app"> |
12.5 watch
、computed
和methods
之间的对比
computed
属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用;methods
方法表示一个具体的操作,主要书写业务逻辑;watch
一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computed
和methods
的结合体;
13. 使用render函数渲染组件
在页面中渲染基本的组件
1 | <div id="app"> |
在页面中使用render函数渲染组件
1 | <div id="app"> |
14. Vuex
vuex 是 Vue 配套的公共数据管理工具,它可以把一些共享的数据,保存到 vuex 中,方便 整个程序中的任何组件直接获取或修改我们的公共数据
14.1 安装
在 Vue 之后引入 vuex
会进行自动安装
1 | <script src="/path/to/vue.js"></script> |
NPM
1 | npm install vuex --save |
Yarn
1 | yarn add vuex |
在一个模块化的打包系统中,您必须显式地通过 Vue.use()
来安装 Vuex:
1 | import Vue from 'vue' |
当使用全局 script 标签引用 Vuex 时,不需要以上安装过程。
每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:
- Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
- 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
14.2 最简单的 Store
安装Vuex 之后,让我们来创建一个 store。创建过程直截了当——仅需要提供一个初始 state 对象和一些 mutation:
1 | import Vue from 'vue' |
现在,你可以通过 store.state
来获取状态对象,以及通过 store.commit
方法触发状态变更:
1 | store.commit('increment') |
为了在 Vue 组件中访问 this.$store
property,你需要为 Vue 实例提供创建好的 store。Vuex 提供了一个从根组件向所有子组件,以 store
选项的方式“注入”该 store 的机制:
1 | new Vue({ |
14.3 案例
main.js
1 | // 入口文件 |
counter.vue
1 | <template> |
amount.vue
1 | <template> |
-------------本文结束感谢您的阅读-------------
本文标题: Vue(二)
本文链接: https://wgy1993.gitee.io/archives/a5e3c20a.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
