Vue -- 自定义404页面 、 路由钩子、路由钩子与异步请求

本文详细介绍了在Vue.js项目中如何设置路由模式为hash,自定义404错误页面,以及在路由钩子函数beforeRouteEnter中进行异步请求的数据加载。同时,文章涵盖了Axios的安装与使用,以及在beforeRouteEnter钩子中进行数据获取的完整流程。通过这些步骤,开发者可以更好地理解和掌握Vue.js的路由管理和数据获取技巧。
摘要由CSDN通过智能技术生成

1. Vue–404和路由钩子

项目结构


路由模式有两种

  • hash:路径带 # 符号,如 http://localhost/#/login
    在这里插入图片描述
  • history:路径不带 # 符号,如 http://localhost/login
    在这里插入图片描述

1.1 使用hash路由模式(推荐)

修改路由配置,代码如下:

export default new Router({
  mode: 'history',
  routes: [
  ]
});

1.2 自定义置404页面


1.2.1 创建一个NotFound.vue视图组件

在这里插入图片描述

NotFound.vue

<template>
  <div>
    <img src="../../static/img/404.jpg" alt="">
  </div>
</template>

<script>
  export default {
    name: "NotFound"
  }
</script>

<style scoped>
</style>

1.2.2 配置路由

在这里插入图片描述

import NotFound from '../components/NotFound'
{
   path: '*',
   component: NotFound
}

1.2.3 运行结果

在这里插入图片描述


1.3 路由钩子与异步请求

2个常用的与路由相关的钩子函数

  • beforeRouteEnter:在进入路由前执行
  • beforeRouteLeave:在离开路由前执行

1.3.1 路由钩子

Profile.vue

  export default {
    props: ['id'],
    name: "userProfile",
    beforeRouteEnter: (to, from, next) => {
      console.log("准备进入个人信息页");
      next();
    },
    beforeRouteLeave: (to, from, next) => {
      console.log("准备离开个人信息页");
      next();
    }
  }

参数说明:

  • to:路由将要跳转的路径信息
  • from:路径跳转前的路径信息
  • next:路由的控制参数
  • next() 跳入下一个页面
  • next('/path') 改变路由的跳转方向,使其跳到另一个路由
  • next(false) 返回原来的页面
  • next((vm)=>{}) 仅在 beforeRouteEnter 中可用,vm 是组件实例

1.3.2 异步请求

在钩子函数中使用异步请求

1.3.2.1 安装 Axios

当前项目目录打开命令行输入:

npm install --save axios vue-axios

1.3.2.2 main.js引用 Axios
import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)

1.3.2.3 准备数据

只有我们的 static 目录下的文件是可以被访问到的,所以我们就把静态文件放入该目录下。
在这里插入图片描述

{
  "name": "码云",
  "url": "https://gitee.com/",
  "page": 1,
  "isNonProfit": true,
  "address": {
    "street": "大渡口",
    "city": "重庆",
    "country": "中国"
  },
  "links": [
    {
      "name": "Axios中文文档",
      "url": "http://www.axios-js.com/zh-cn/docs/"
    },
    {
      "name": "百度",
      "url": "https://www.baidu.com/"
    }
  ]
}

1.3.2.4 beforeRouteEnter 中进行异步请求
<script>
  export default {
    //第二种取值方式
    props:['id'],
    name: "userProfile",
    //钩子函数 过滤器
    beforeRouteEnter: (to, from, next) => {
      //加载数据
      console.log("进入路由之前")
      next(vm => {
        //进入路由之前执行getData方法
        vm.getData()
      });
    },
    beforeRouteLeave: (to, from, next) => {
      console.log("离开路由之前")
      next();
    },
    //axios
    methods: {
      getData: function () {
        this.axios({
          method: 'get',
          url: 'http://localhost:8080/static/mock/data.json'
        }).then(function (response) {
          console.log(response)
        })
      }
    }
  }
</script>

1.3.2.5 路由钩子和axios结合结果

在这里插入图片描述



评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeJiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值