Vue2.0基础
前言
主要介绍Vue2.0的基本语法。
项目创建
1 | vue create 你的项目名称 |
基础语法一
1 | // 文本插值 |
基础语法二
1 | // 计算属性 |
声命周期
- 什么是vue生命周期?
生命周期:Vue实例从创建到销毁的过程,也就是从开始创建、初始化数据、编译模板、挂载DOM-渲染、更新-渲染、卸载等一系列的过程。
- vue生命周期的作用是什么?
Vue所有的功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数可以实现组件数据管理和DOM渲染两大重要功能。
- 第一次页面加载会触发哪几个钩子?
beforeCreate、created、beforeMount、mounted这四个钩子
简述每个周期具体适合哪些场景?
- beforeCreate-实例初始化之后,this指向创建的实例,此时的数据观察事件机制都未形成,不能获得DOM节点。data、computed、watch、methods上的方法和数据均不能访问。可以添加loading事件、初始化非响应式变量;
- created-实例创建完成,完成数据(data、props、computed)的初始化导入依赖项。可访问data、computed、watch、methods上的方法和数据。常用于异步请求(请求过多会导致白屏),结束loading事件;未挂载DOM,若在此阶段进行DOM操作一定要放在Vue.nextTick()的回调函数中。
- beforeMount-挂载开始之前,vue挂载的根节点template已经创建,得不到具体的DOM元素;
- mounted-实例挂载到DOM上,完成双向绑定、挂载DOM和渲染,可对DOM进行操作,接口请求;
- beforeUpdate-数据更新前,是更新数据之后,还没有渲染的时候执行。可在更新前访问现有的DOM,手动移出添加的事件监听器。
- updated-数据更新后,完成虚拟DOM的重新渲染和打补丁。组件DOM已完成更新,可执行依赖的DOM操作。注意:不要在此函数中操作数据(修改属性),会陷入死循环。
- beforeDestroy-实例销毁之前,可做一些删除提示、销毁定时器、解绑全局事件、销毁插件对象等操作。
- destroyed-实例销毁后,Vue实例指向的所有东西都会解绑定,无法操作里面的任何东西。
父子组件的生命周期
执行顺序:
父组件开始执行到beforeMount 然后开始子组件执行,最后是父组件mounted。
如果有兄弟组件,父组件开始执行到beforeMount,然后兄弟组件依次执行到beforeMount,然后按照顺序执行mounted,最后执行父组件的mounted。
当子组件挂载完成后,父组件才会挂载。销毁父组件时,先将子组件销毁后才会销毁父组件。
组件
组件的定义与使用
1 | // 新建src/components/Child.vue 文件 |
插槽
1 | // 父元素的组件上 |
动态组件
通过 Vue 的 元素加一个特殊的is来实现,在不同组件之间进行动态切换
1 | // 父组件 |
异步组件
组件只在需要的时候才从服务器加载一个模块, 组件需要被渲染的时候才会触发该工厂函数,且会把结果缓存起来供未来重渲染。
1 | <script> |
过滤器
1 | // yarn add moment |
mixin 混入
mixin可以将重复的 js 代码拆分出去,在需要使用的文件中引用即可。
相同的生命周期,会先调用
mixin中的,然后再调用组件中的;data中的数据会互相合并,如果同名则保留组件中的;
同名的方法,保留组件中的;
1 | // myMixin.js文件 |
自定义指令
钩子函数:
| 钩子函数 | 解释 |
|---|---|
| bind | 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。 |
| inserted | 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中) |
| update | 所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新。 |
| componentUpdated | 指令所在组件的 VNode 及其子 VNode 全部更新后调用 |
| unbind | 只调用一次,指令与元素解绑时调用 |
钩子函数参数:
| 参数 | 解释 |
|---|---|
| el | 指令所绑定的元素,可以用来直接操作 DOM。 |
| binding | 一个对象,包含以下 property:name、value等 |
| vnode | Vue 编译生成的虚拟节点。移步 VNode API 来了解更多详情。 |
| oldVnode | 上一个虚拟节点,仅在update和componentUpdated钩子中可用。 |
1 | // 使用 |
Vue Router 路由
路由的基本结构
1 | // 路由文件index.js |
路由跳转
| 方法 | 说明 |
|---|---|
<router-link to="/about"> |
HTML 中,链接到/about |
<router-link :to="{ path: '/about'}"> |
HTML 中,链接到/about |
<router-link :to="{ name: 'About'}"> |
HTML 中,链接到命名为About的路由组件 |
<router-link :to="{ name: 'About', params: { id: 999 }}"> |
HTML 中,链接到命名为About的路由组件,并传递路由参数 |
<router-link :to="{ name: 'About', query: { keyword: '长乐未央' }}"> |
HTML 中,链接到命名为About的路由组件,并传递查询参数 |
this.$router.push({ path: '/about' }) |
通过代码,跳转到/about |
this.$router.push({ name: 'About' }) |
通过代码,跳转到命名为About的路由组件 |
this.$router.push({ path: '/about/999' }) |
通过代码,跳转到路径为/about的路由组件,并传递路由参数 |
this.$router.push({ name: 'About', params: { id: '999' } }) |
通过代码,跳转到命名为About的路由组件,并传递路由参数 |
this.$router.push({ name: 'About', query: { keyword: '长乐未央' } }) |
通过代码,跳转到命名为About的路由组件,并传递查询参数 |
this.$route.params.id |
获取传递过来的路由参数值 |
this.$route.query.keyword |
获取传递过来的查询参数值 |
路由守卫
1 | { |
vue动态路由和权限控制
1 | // 添加路由 |
权限动态路由使用
1 | // router/index.js中 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 moxieBlog!
