vue知识(四)生命周期、钩子函数、路由
文章目录
- 一、生命周期
- (一)vue生命周期
- 二、钩子函数
- (一)钩子函数
- (二)4大阶段8个方法
- (1)如何知道vue生命周期到达了什么阶段?
- (2)钩子函数有哪些
- (三)初始化
- (1)new Vue()
- (2)Init Events & Lifecycle
- (3)beforeCreate
- (4)Init injections & reactivity
- (5)created
- (6)编译模板
- (7)Has el option?
- (四)挂载
- (1)template选项检查
- (2)虚拟DOM挂载成真实DOM之前
- (3)beforeMount
- (4)Create...
- (5)真实DOM挂载完毕
- (6)mounted
- (五)更新
- (1)当data里数据改变,更新DOM之前
- (2)beforeUpdate
- (3)virtual DOM...
- (4)updated
- (5)当有data数据改变---重复这个循环
- (六)销毁
- (1)当$destroy()被调用---比如组件DOM被移除(例v-if)
- (2)beforeDestroy
- (3)拆卸数据监视器,子组件和事件侦听器
- (4)实例销毁后,最后触发一个钩子函数
- (5)destroyed
- 三、路由
- (一)为什么要使用路由呢?
- (1)单页面应用(SPA)
- (2)前端路由作用
- (3)优点
- (4)缺点
- (5)vue-router
- (二)组件分类
- (1)目标
- (2)vue-router模块
- (三)声明式导航
- (1)目标
- (2)问题
- (3)跳转传参
- a.目标
- b.方法
- (四)路由重定向
- (1)目标
- (2)问题
- (五)路由404设置
- (1)目标
- (2)问题
- (六)路由模式修改
- (1)目标
- (2)问题
- (七)编程式导航
- (1)目标
- (2)问题
- (3)跳转传参
- (八)路由嵌套
- (1)目标
- (2)问题
- (九)激活类名的区别
- (1)声明式导航----类名区别
- (2)自动添加2个类的区别
- (十)路由守卫
- (1)全局前置守卫
- (2)问题
一、生命周期
(一)vue生命周期
从创建到销毁的整个过程就是vue实例的生命周期
vue的生命周期是从vue实例创建到销毁的过程,也就是new Vue() 开始就是vue生命周期的开始。Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。
二、钩子函数
(一)钩子函数
- 目标:vue框架内置函数,随着组件的生命周期阶段,自动执行
- 作用:特定的时间点,执行特定的操作
- 场景:组件创建完毕后,可以在created生命周期函数中发起Ajax请求,从而初始化data数据
(二)4大阶段8个方法
(1)如何知道vue生命周期到达了什么阶段?
使用钩子函数
(2)钩子函数有哪些
8个方法
初始化、挂载、更新、销毁
(三)初始化
初始化vue的实例,并不是初始化页面
(1)new Vue()
Vue实例化(组件也是一个小的Vue实例)
new Vue()以后,vue内部给实例对象添加一些属性和方法,data和methods初始化之前
(2)Init Events & Lifecycle
初始化事件和生命周期函数
(3)beforeCreate
生命周期钩子函数被执行(还没有data)
(4)Init injections & reactivity
Vue内部添加data和methods等挂载到vm实例对象上
(5)created
生命周期钩子函数被执行,实例创建(可以访问data)
场景:网络请求: 能拿到后台返回的数据,能访问data的变量,把后台返回的数据可以挂载到变量上;注册全局事件:例如eventbus 给窗口绑定滚动事件
(6)编译模板
编译模板阶段—开始分析
(7)Has el option?
是否有el选项—检查要挂到哪里
1.没有,调用$mount()方法
2.有,继续检查template选项
问题
1.vue实例从创建到编译模板执行了哪些钩子函数
beforeCreated/created
2.created函数触发能获取data吗?
能获取data,不能获取真实DOM
(四)挂载
(1)template选项检查
1.有—编译template返回render渲染函数
2.无—编译el选项对应标签作为template(要渲染的模板)
(2)虚拟DOM挂载成真实DOM之前
(3)beforeMount
生命周期钩子函数被执行(拿不到真实的DOM)
场景:预处理data,不会触发updated钩子函数
(4)Create…
把虚拟DOM和渲染的数据一并挂到真实DOM上
(5)真实DOM挂载完毕
(6)mounted
生命周期钩子函数被执行(能拿到真实DOM)
场景:挂载后真实DOM
问题
vue实例从创建到显示都经历了哪些钩子函数?
beforeCreate\created\before\mounted
(五)更新
(1)当data里数据改变,更新DOM之前
(2)beforeUpdate
生命周期钩子函数被执行(拿不到更新后的DOM)
(3)virtual DOM…
虚拟DOM重新渲染,打补丁到真实DOM
(4)updated
生命周期钩子函数被执行
场景:获取更新后的真实DOM
当数据发生变化并更新页面后,执行updated钩子函数
(5)当有data数据改变—重复这个循环
(六)销毁
前提:v-if=“false” 销毁Vue实例
场景:移除全局事件,移除当前组件,计时器,定时器,eventBus移除事件$off方法
(1)当$destroy()被调用—比如组件DOM被移除(例v-if)
(2)beforeDestroy
生命周期钩子函数被执行
(3)拆卸数据监视器,子组件和事件侦听器
(4)实例销毁后,最后触发一个钩子函数
(5)destroyed
生命周期钩子函数被执行
问题
一般在beforeDestroy/destroyed里面干什么?
移除全局事件,移除当前组件,定时器
三、路由
1.什么是路由? 路由是一种映射关系
2.vue中的路由是什么? 路径和组件的映射关系
3.生活中的路由:目标:设备和ip的映射关系
4.nodejs路由:目标:接口和服务的映射关系
5.前端路由:目标:路径和组件的映射关系
(一)为什么要使用路由呢?
(1)单页面应用(SPA)
所有功能在一个html页面上实现
(2)前端路由作用
实现业务场景切换
(3)优点
整体不刷新页面,用户体验更好
数据传递更容易,开发效率更高
(4)缺点
开发成本高(需要学习专门知识)
首次加载会比较慢,不利于seo搜索引擎排名
(5)vue-router
使用vue-router集成包在vue中使用路由
vue-router本质是一个第三方包
vue-router模块包
- 它和Vue.js深度集成
- 可以定义视图表(映射规则)
- 模块化
- 提供2个内置全局组件
- 声明式导航自动激活的CSS,class的链接
(二)组件分类
(1)目标
vue文件分2类(方便理解和使用),一个是页面组件,一个是复用组件
src/views文件夹:页面组件–页面展示,配合路由使用,切换页面
src/components文件夹:复用组件–展示数据、常用于复用,重复渲染结构一样的标签
(2)vue-router模块
目标:学会vue-router路由系统使用
步骤
- 下载vue-router模块到当前工程
- 在main.js中引入VueRouter函数
- 添加到Vue.use()身上—注册全局RouterLink和RouterView组件
- 创建路由规则数组—路径和组件名对应关系
- 用规则生成路由对象
- 把路由对象注入new Vue实例中
- 用router-view作为挂载点切换不同的路由页面
规则如何生效?
切换url上hash值,开始匹配规则,对应组件展示到router-view位置
(三)声明式导航
(1)目标
可用router-link来代替a标签
vue-router提供了一个全局组件router-link
router-link实质上最终会渲染成a链接, to属性等价于提供href属性(to无需#)
router-link提供了声明式导航高亮的功能(自带类名)
添加class类名:router-link-exact-active router-link-active 可对激活的类名进行样式编写
(2)问题
1.router-link是什么? VueRouter在全局注册的组件,本质是a标签
2.router-link怎么用? 当标签使用,必须传入to属性,指定路由路径值
3.router-link好处?自带激活时的类名,可以做高亮
(3)跳转传参
a.目标
在跳转路由时,可以给路由对应的组件内传值
b.方法
方法一
在router-link上的to属性传值,语法格式如下:/path?参数名=值
对应页面组件接收传递过来的值:$route.query.参数名
方法二
在router-link上的to属性传值,语法格式如下:/path/值
—需要路由对象提前配置path(/path/参数名
)
对应页面组件接收传递过来的值:$route.params.参数名
(四)路由重定向
(1)目标
匹配path后,强制跳转path路径
网页打开url默认hash值是/路径(localhost:8080/#/)
redirect是设置要重定向到哪个路由路径
(2)问题
1.如何监测默认路由? 规则里定义
path:'/'
2.如何重定向路由路径? redirect配置项,值为要强制切换的路由路径
(五)路由404设置
(1)目标
找不到路径,给个提示页面
路由最后,path匹配*(任意路径)—当前面不匹配就命中最后这个
(2)问题
如何给路由体系设置404页面?
在数组最后一个位置,插入匹配*的规则,展示404页面
(六)路由模式修改
(1)目标
修改路由在地址栏的模式
hash路由:例如,http://localhost:8080/#/home
history路由:例如,http://localhost:8080/home (以后上线需要服务器端支持,否则找的是文件夹)
(2)问题
如何修改路由模式呢?
在实例化路由对象时,传入mode选项和值修改
(七)编程式导航
(1)目标
用JS代码来进行跳转
语法:path或者name任选一个
this.$router.push({path:"路由路径",name:"路由名" })
path
name
(2)问题
JS如何切换路由路径?
this.$router.push()配置path/name;要和路由规则数组里对应
(3)跳转传参
目标:JS跳转路由,传参
语法:query或者params任选一个(使用path会忽略params;推荐使用name+query方式传参)
this.$router.push({path:"路由路径",name:"路由名",query:{"参数名":值},params:{"参数名":值},})
注意:如果当前url上"hash值和?参数"与你要跳转到的"hash值和?参数"一致,爆出冗余导航的问题,不会跳转路由
JS切换路由如何传值,如何接收值
query传, r o u t e . q u e r y 接 p a r a m s 传, route.query接 params传, route.query接params传,route.params接
(八)路由嵌套
(1)目标
在现有的一级路由下,再嵌套二级路由
创建所有的组件
main.js—继续配置二级路由
一级路由path从/开始
二级路由往后path直接写名字,无需开头
嵌套路由在上级路由的children数组里编写路由信息对象
- 说明
App.vue的router-view负责发现音乐和我的音乐页面切换
Find.vue的router-view负责发现音乐下的三个页面切换
Ranking.vue
Recommend.vue
SongList.vue
Main.js
(2)问题
1.二级路由如何配置?
创建需要的二级页面组件
路由规则里children中配置二级路由规则对象
一级页面设置router-view显示二级路由页面
2.二级路由注意什么?
二级路由path一般不写根路径/
跳转时路径要从/开始写全
(九)激活类名的区别
(1)声明式导航----类名区别
观察路由嵌套导航的样式
router-link-exact-active(精确匹配)url中的hash值路径,与href属性值完全相同,设置此类名
router-link-active(模糊匹配)url中hash值,包含href属性值这个路径
(2)自动添加2个类的区别
router-link-exact-active-----url的hash值和href完全匹配
router-link-active----url的hash值包含href路径值匹配
(十)路由守卫
(1)全局前置守卫
目标:路由跳转之前,会触发一个函数
语法: router.beforeEach((to,from,next)=>{路由跳转之前先执行这里,决定是否跳转})
to:目标 from:来源 next:函数体
一定要调用next(),才会跳转到下一页
(2)问题
什么是路由守卫?
路由在真正跳转之前,会执行一次beforeEach函数,next调用则跳转,也可以强制修改跳转的路由
vue知识(四)生命周期、钩子函数、路由相关推荐
- vue的组件/data的参数/组件传值/插槽/侦听器/生命周期钩子函数
目录 组件结构 组件的命名规则: 组件的data参数 <font color='red'> 组件的父子传值prop(通信) <font color='red'>组件的子--&g ...
- Vue的生命周期钩子函数介绍
感谢内容提供者:金牛区吴迪软件开发工作室 Vue的生命周期钩子函数介绍 vue生命周期共分为四个阶段 一:实例创建 二:DOM渲染 三:数据更新 四:销毁实例 共有八个基本钩子函数 1.beforeC ...
- Vue的生命周期钩子函数
Vue的生命周期钩子函数 一.Vue的生命周期共分为四个阶段 1.创建实例 2.DOM渲染 3.数据更新 4.销毁实例 二.共有八个基本钩子函数 1.beforeCreate -创建前 触发的行为:V ...
- 教女朋友学习 vue的生命周期钩子函数
写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...
- 不来看看这些 VUE 的生命周期钩子函数? | 原力计划
作者 | huangfuyk 责编 | 王晓曼 出品 | CSDN 博客 VUE的生命周期钩子函数:就是指在一个组件从创建到销毁的过程自动执行的函数,包含组件的变化.可以分为:创建.挂载.更新.销毁四 ...
- vue生命周期钩子函数的正确使用方式
对于vue生命周期我们还是要先了解清楚,因为不同的生命期用不同的钩子函数,先上图: 遇到的一个问题 在我的项目中,常用的生命周期钩子函数一直都是mounted,对于大部分情况,都是屡试不爽.捷报频传~ ...
- 史上最全的Vue生命周期钩子函数11个
什么是生命周期? 生命周期: Vue是一个构造函数,当执行执行这个函数时,相当于初始化vue实例: 在创建实例过程中,需要设置数据监听,编译模板,将实例挂载到DOM上,数据更新能够让DOM也更新,在这 ...
- 详解Vue八大生命周期钩子函数
摘要:Vue为生命周期中的每个状态都设置了钩子函数(监听函数) .每当Vue实例处于不同的生命周期时,对应的函数就会被触发调用. 本文分享自华为云社区<一文带你弄懂Vue八大生命周期钩子函数&g ...
- 实战 Vue 之生命周期钩子函数执行顺序
实战 Vue 之生命周期钩子函数执行顺序 生命周期钩子函数 父组件与子组件执行顺序 生命周期钩子函数 beforeCreate:实例刚被创建出来,data 数据和 methods 方法还未被初始化,不 ...
- vue生命周期 钩子函数
vue实例的生命周期:从创建到销毁的整个过程 1.钩子函数 vue框架内置函数,随着组件的生命周期阶段,自动执行 使用钩子函数 可以知道vue生命周期到达了什么阶段 作用:在特定的时间点执行特定的操作 ...
最新文章
- 如何用javasript对Gridview的项目进行汇总统计?
- WebForm 【上传图片--添加水印】
- nedc和epa续航里程什么意思_景区电动观光车的续航里程为什么会逐渐变短?
- Android简易实战教程--第四十四话《ScrollView和HorizontalScrollView简单使用》
- python基础教程:3种控制流语句(if,for,while)
- MAC地址如何在windows与unix下查看?
- GPU Gems1 - 24 高质量的过滤
- 重磅 | 边缘计算核心技术辨析
- linux系统编程 传智播客,传智播客王保明Linux培训系列教程全120集
- golang延时,在golang中使用延迟
- IDEA/Pycharm 插件与主题切换
- KDD2021 | 推荐系统中利用深度哈希方法学习类别特征表示
- OkHttp 3.x 源码解析之Dispatcher分发器
- 《Lucene in Action》 MoreLikeThis 实例
- 如何防止盗号 使用windows自带的 屏幕键盘 OSK
- 一个二本本科生如何才能进入腾讯,阿里,百度这些大厂?
- SpringBoot 默认数据库连接池 HikariCP
- 遇人不淑之逗比程序员
- 【京东】商品评价数据采集+买家评论数据+卖家评论数据采集+行业数据分析+行业数据质检分析
- Mac 开启局域网smb文件共享(附全平台连接方法)
热门文章
- 边角地“变废为宝” 重庆首批社区体育文化公园交付使用
- 封面文章:寻找技术中国——渴望不再被扼住喉咙!
- 摩根大通提交分散式虚拟收据系统新专利
- 三维渲染 体照明模型
- win10解决 netstart -ano|findstr “8080“出现netstart不适内部或外部命令
- 端午节送点话费给大家,千万别错过!
- 怎么从Apache maven 官网下载旧版本
- 【CSS3】CSS3动画——我离前端的炫酷又近了一步
- 设计模式 -- 访问者模式(Visitor)
- 2014.03.31_一年很快过去了