生命周期、钩子函数、路由

一、生命周期

1、Vue实例的生命周期:从创建到销毁的整个过程
在这里插入图片描述

钩子函数

钩子函数是Vue框架内置函数,随着组件的生命周期阶段,自动执行,实现在特定的时间点,执行特定的操作

  • 四大阶段8个方法
    在这里插入图片描述
    1、初始化

beforeCreate()执行在new Vue()以后,vue内部给实例对象添加了一些属性和方法,在data和methods初始化之前;但它很少使用,更多使用created

created()执行在data和methods初始化以后,可以访问到data中的变量
使用场景:网络请求,注册全局事件

在这里插入图片描述
2、挂载

beforeMount()在真实DOM挂载之前执行
使用场景:预处理data,不会触发updated钩子函数

mounted()在真实DOM挂载以后
使用场景:获取真实DOM

3、更新
前提:data数据改变才执行

beforeUpdate()在更新之前执行
无法获取到真实的DOM节点

updated()在更新之后执行
使用场景:获取更新后的真实DOM

在这里插入图片描述
4、销毁
在这里插入图片描述
前提:当v-if=“false” 时,销毁Vue实例

二者使用场景:移除全局事件,移除当前组件,计时器,定时器,eventBus移除事件使用$off方法

二、axios使用

axios是一个专门用于发送ajax请求的库

1、特点:

  • 支持客户端发送Ajax请求
  • 支持服务端Node.js发送请求
  • 支持Promise相关用法
  • 支持请求和响应的拦截器功能
  • 自动转换JSON数据
    2、使用:下载axios,引入axios
    get请求方式:
    在这里插入图片描述
    如果需要传参,写在params配置项中,它会把参数自动写在url?后面

post请求方式:
post请求方式中,一般在请求体的data中传递数据给后台,data可以把参数自动装入到请求体中
3、全局配置基地址

axios.defaults.baseURL=""

axios官网

三、路由

简单来说,前端路由就是路径和组件的映射关系
1、使用路由的原因:

  • 单页面应用:可以实现所有功能在一个html页面上实现
  • 实现业务场景切换
  • 整体不刷新页面,用户体验更好,传递数据容易,开发效率高
    2、使用路由——vue-router
    Vue Router官方介绍

组件分类:页面组件和复用组件
在这里插入图片描述

步骤:

  • 下载vue-router模块到当前工程
  • 在main.js中引入VueRouter函数
  • 添加到Vue.use()身上-注册全局RouterLink和RouterView组件
  • 创建路由规则数组-路径和组件名有对应关系
  • 用规则生成路由对象
  • 把路由对象注入到new Vue实例中
  • 用router-view作为挂载点,切换不同的路由页面
    在这里插入图片描述
    3、声明式导航-基础使用(router-link)
  • "router-link"是vue-router提供的全局组件,用它来代替a标签,用to属性替代href属性
  • 点击时,被点击的标签会被自动加上一个特殊的类名
<template>
<div>
  <div class="head">
    <router-link to="#/find">发现</router-link>
    <router-link to="#/my">我的</router-link>
  </div>
  <div class="top">
    <router-view></router-view>
  </div>
</div>
</template>

4、声明式导航-跳转传值
方式1:
要传值一方:to=“/path?参数名=值”
接收方:$ route.query.参数名
方式2:
要传值一方:首先在main.js中的路由规则path上定义 /path/:参数名,之后 to=“/path/值”
接收方:$route.params.参数名
5、重定向

匹配根路径后,强制跳转到某一个path路径

在规则数组中

{
   path:"/",   //根路径
   redirect:"/要跳转的path"
}

6、404页面设置

如果找不到路径,则给出提示页面

在规则数组中添加,添加到最后位置

{
   path:"*" ,  //根路径
   component:NotFound
}

7、路由模式修改
在这里插入图片描述
在这里插入图片描述
8、编程式导航(js方式跳转路由)
语法:
二者择其一

  • this.$ router.push({path:“路由路径”})
  • this.$ router.push({name:“路由名”})
  • 如果使用name,则需要在规则数组中添加name属性
methods:{
    btn(targetPath,targetName){
      this.$router.push({
        path:targetPath  /  name:targetName
      })
    }
  }

9、编程式导航-传参
query和params任选一个,但是query和path不可以组合,推荐使用name和query组合
在这里插入图片描述

  • params=>$ route.params.参数名
  • query=>$ route.query.参数名
    10、路由嵌套

在现有的一级路由下,再嵌套二级路由

在这里插入图片描述

  • 一级路由path从/开始定义
  • 二级路由往后path直接写名字,无需/开头
  • 嵌套路由在上级路由的children数组里编写路由信息对象
  • 一级页面中需要写入router-view来展现二级页面
    11、声明式导航中两个激活类名的区别
  • url上hash值如果包含导航href值,当前a就有“router-link-active” 类名(模糊)
  • 如果等于,则有“router-link-exact-active” 类名(精确)

12、路由守卫

当需要对路由权限进行判断时使用

语法:
写在main.js中

router.beforeEach((to,from,next)=>{})

参数1:要跳转到的路由信息
参数2:从哪里跳转的路由信息
参数3:函数体,next()会让路由正常跳转,next(false)会阻止跳转,原地停留,next(“强制修改到另一个路由路径上”)
如果不调用next,页面停留在原地

//登录例子
const isLogin=true;
router.beforeEach((to,from,next)=>{
  if(to.path==="/my"&&isLogin==false){
    alert("请登录")
    next(false)
  }else {
    next()
  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
路由钩子函数分为全局钩子和局部钩子。 全局钩子函数是在整个应用程序的路由生命周期中都会被调用的函数,它们可以用来处理全局的路由逻辑。全局钩子函数包括 `beforeEach`、`beforeResolve` 和 `afterEach`。`beforeEach` 函数用于在路由跳转前进行一些操作,例如验证用户权限、判断用户是否登录等等。`beforeResolve` 函数用于在路由解析完成后、在组件渲染之前被调用。`afterEach` 函数用于在路由跳转完成后进行一些操作,例如页面统计、记录用户行为等等。 局部钩子函数是在组件内定义的函数,用于处理该组件的特定路由逻辑。局部钩子函数包括 `beforeRouteEnter`、`beforeRouteUpdate` 和 `beforeRouteLeave`。`beforeRouteEnter` 函数在该组件被路由激活进入之前被调用,它可以用于在组件渲染之前进行一些操作,例如获取数据等等。`beforeRouteUpdate` 函数在该组件在路由参数发生变化时被调用。`beforeRouteLeave` 函数在该组件被路由离开之前被调用,它可以用于在组件销毁之前进行一些操作,例如保存数据等等。 要使用路由钩子函数,可以在路由配置中定义相应的函数。例如,在全局钩子函数中,可以定义 `beforeEach` 函数来进行用户验证: ``` router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !auth.isAuthenticated()) { next('/login') } else { next() } }) ``` 在组件中,可以定义 `beforeRouteEnter` 函数来获取数据: ``` export default { beforeRouteEnter (to, from, next) { axios.get('/api/data').then(response => { next(vm => { vm.data = response.data }) }) } } ``` 需要注意的是,钩子函数中的 `next` 参数是一个函数,用于控制路由跳转。如果调用 `next()`,则表示继续路由跳转。如果调用 `next(false)`,则表示取消路由跳转。如果调用 `next('/path')`,则表示跳转到指定路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值