• 第六讲 路由的简单介绍


    目录

    路由  vue-router

    一、下载

    二、组件

    二、路由的配置 :/router/index

    (1)、普通路由配置

    (2)、普通路由传参

    ​ 三、404页面:404的path为*,配置在最后面

    四、编程式路由跳转$router

    五、路由信息$route

     六、路由守卫

    七、路由元信息

    八、路由查询参数

    1、传递

    2、获取


    路由  vue-router

    原理:地址发生 变化,刷新页面,检测地址栏变化切换div更新视图 hash路由

    Vue.js 路由允许我们通过不同的 URL 访问不同的内容。

    一、下载

    1、直接下载 / CDN

    https://unpkg.com/vue-router/dist/vue-router.js

     2. NPM :推荐使用淘宝镜像:

    npm install vue-router

    二、组件

    (1) 相关属性

    1、to:表示目标路由的链接。 当被点击后,内部会立刻把 to 的值传到 router.push(),所以这个值可以是一个字符串或者是描述目标位置的对象。

    1. <router-link to="home">Homerouter-link>
    2. <a href="home">Homea>
    3. <router-link v-bind:to="'home'">Homerouter-link>
    4. <router-link :to="'home'">Homerouter-link>
    5. <router-link :to="{ path: 'home' }">Homerouter-link>
    6. <router-link :to="{ name: 'user', params: { userId: 123 }}">Userrouter-link>
    7. <router-link :to="{ path: 'register', query: { plan: 'private' }}">Registerrouter-link>

    2、replace:设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录

     3、active-class:设置 链接激活时使用的 CSS 类名。

    1. <style>
    2. ._active{
    3. background-color : red;
    4. }
    5. style>
    6. <p>
    7. <router-link v-bind:to = "{ path: '/route1'}" active-class = "_active">首页router-link>
    8. <router-link v-bind:to = "{ path: '/route2'}" tag = "span">关于router-link>
    9. p>

    二、路由的配置 :/router/index

    (1)、普通路由配置

    1. {
    2. path:"/user",
    3. name:"user",
    4. component:()=>import(xxx)
    5. }

    (2)、普通路由传参

    1. {
    2. path:"/product/:id",
    3. name:"product",
    4. component:xxx
    5. }
    6. link to="/product/abc">
    7. 在页面中获取
    8. $route.params.id

     三、404页面:404的path为*,配置在最后面

    1. {
    2. path:“*”
    3. }

    ​​​​​

    四、编程式路由跳转$router

    • 前进   forward()    go(1)
    • 后退   go(-1)    back()
    • 切换路由    push("/about")
    • 替换路由    replace("/about")
    1. <template>
    2. <div>
    3. <h1>用户中心h1>
    4. <button @click='$router.back()'>返回button>
    5. <button @click='$router.go(-1)'>返回1button>
    6. <button @click='$router.forward()'>前进button>
    7. <button @click='$router.go(1)'>前进1button>
    8. <br>
    9. <button @click='$router.push("/about")'>关于button>
    10. <button @click='$router.replace("/about")'>关于-替换(不留历史记录)button>
    11. <br>
    12. <router-link :to="{'name':'about'}">关于router-link>
    13. <router-link :to="{path:'/product/def',query:{age:18},hash:'best'}">产品router-link>
    14. <router-link to='/product/def?age=18#best'>产品router-link>
    15. div>
    16. template>

    五、路由信息$route

    • 路由参数    params
    • 查询    query
    • 地址    path
    • 全地址    fullPath
    • 名称    name
    • 哈希值    hash
    1. <template>
    2. <div>
    3. <h1>产品页面{{$route.params.id}}h1>
    4. <p>查询参数:{{$route.query}}p>
    5. <p>哈希值:{{$route.hash}}p>
    6. <p>全地址:{{$route.fullPath}}p>
    7. <p>地址:{{$route.path}}p>
    8. <p>名称:{{$route.name}}p>
    9. <button @click='$router.back()'>返回button>
    10. div>
    11. template>
    12. <script>
    13. script>
    14. <style>
    15. style>

     六、路由守卫

    (1)组件内部

    • 进入前:beforeRouterEnter(to,from,next)
    • 离开前: beforeRouteLeave
    • 更新前:beforeRouterUpdate

    解释(to,from,next):

    1.  to要进入的路由
    2.  from从哪个页面进入
    3.  next下一步(必须要执行)
    • next(进入to页面
    • next(true)进入to页面
    • next(false)不跳转
    • next("/login")跳转到登录
    1. <script>
    2. // 导航守卫:在进入,离开页面前,做一些事情
    3. //离开页面前,让用户确认是否离开
    4. import { getCartList } from "@/api/shop.js";
    5. export default {
    6. data() {
    7. return {
    8. cartList: [],
    9. };
    10. },
    11. created() {
    12. getCartList().then((res) => {
    13. if (res.data.code === 200) {
    14. this.cartList = res.data.data;
    15. // console.log(this.cartList);
    16. console.log(res.data.data);
    17. }
    18. });
    19. },
    20. beforeRouteEnter(to, from, next) {
    21. if (localStorage.getItem("token")) {
    22. next();
    23. } else {
    24. alert("请先登录");
    25. // 跳转到登录页面,并携带一个查询参数 名称是redirecrt 值是/cart
    26. next("/login?redirect=/shop");
    27. }
    28. },
    29. beforeRouteLeave(to, from, next) {
    30. //to要去的页面
    31. //from从哪个页面离开
    32. // next下一步(必须要执行)
    33. var flag = window.confirm("亲,商品价格是本月最低价格,确定也放弃优惠吗?");
    34. if (flag) {
    35. next(); //进入下一页面
    36. } else {
    37. next(false); //不离开
    38. }
    39. },
    40. };
    41. script>

    1、全局:

    2、 独享:beforeEnter()

    1. {
    2. //这里不用加斜
    3. name:'home',
    4. path:'home',
    5. component:home,
    6. meta:{isAuth:true},
    7. // 独享路由守卫
    8. beforeEnter:(to,from,next)=>{
    9. if(to.meta.isAuth){
    10. if(localStorage.getItem('school')=== 'beijinhdaxue'){
    11. next()
    12. }else{
    13. alert("请登录")
    14. }
    15. }
    16. }
    17. },

    作用:进入离开页面前做拦截,处理事情(跳转提示,权限检查)

    七、路由元信息

    1. {
    2. path:path,name,component,
    3. meta:{noFooter:true}
    4. }
    5. $route.meta.noFooter范围

    八、路由查询参数

    1、传递

    next("/login?redirect=/cart")

    2、获取

    var redirect = this.$route.query.redirect| | '/user'

     

     

     

     

     

     

  • 相关阅读:
    Linux:TCP三握四挥简析
    【数据分享】2022年全国范围的道路数据(全国/分省/分城市)
    Excel实用函数Vlookup,多sheet之间多字段的匹配取值
    护眼灯显色指数应达多少?适合学生的护眼台灯推荐
    泛微OA之获取每月固定日期
    MFC Windows 程序设计[258]之枚举控件集合(附源码)
    (附源码)python电影院信息管理系统 毕业设计 021844
    uniapp如何上传文件,使用API是什么
    分享5个解决msvcp140.dll丢失的方法,全面解析msvcp140.dll丢失的原因
    CAS 产生的 ABA 问题是什么?怎么解决?
  • 原文地址:https://blog.csdn.net/Fiki515/article/details/126192285