vue Route参数传递和导航守卫

15 篇文章 0 订阅
订阅专栏
路由的传递参数

在这里插入图片描述

对于params方式的传递参数,我们已经讲过。现在我们来使用第二种参数方式来进行练习:

  1. 新建Profile.vue组件

    <template>
        <div>
            <h3>通过query来获取 参数 数据</h3>
            <h5>
                {{$route.query}}
            </h5>
        </div>
    </template>
    <script>
    export default {
      name: 'profile',
      data(){
          
      }
    }
    </script>
    <style  scoped>
    
    </style>
    
    
  2. 去route的index.js中添加路径

    import Vue from 'vue'
    import VueRouter from 'vue-router'
    // import Home from '../components/HelloWorld.vue'
    // import about from '../components/about.vue'
    // import user from '../components/test.vue'
    //先使用 vue的uuse来使用vueroute
    Vue.use(VueRouter)
    //定义route路由
      const routes = [
        {
          path: '/',
          name:'first',
          redirect: '/pagehome'
        },
        {
          path: '/profile',
          component: () => import('../components/Profile.vue')
        },
      {
        path: '/pagehome',
        name: '首页',
        component: () => import('../components/HelloWorld.vue')
      },
      // {
      //   path: '/about',
      //   name: 'About',
      //   // route level code-splitting
      //   // this generates a separate chunk (about.[hash].js) for this route
      //   // which is lazy-loaded when the route is visited.
      //   路由懒加载
      //   component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
      // }
      {
        path: '/about',
        name: '关于',
        component: () => import('../components/about.vue'),
        children:[
          {
            path: 'aboutSub',
            component: () => import ('../components/test2.vue')
          }
        ]
    
      },
      {
        path: '/user/:userId',
        component: () => import('../components/test.vue')
      }
      
    ]
    //history模式就是我们学的history的go,reward。pushState。replaceState啊等。
    const router = new VueRouter({
      mode: 'history',
      base: process.env.BASE_URL,
      routes,
      activeClass: 'changecolor'
    })
    //导出route组件
    export default router
    
    
  3. 添加routelink

    <template>
      <div id="app">
        <div id="nav">
          <!-- <router-link to="/pageHome" tag="button" active-class="changecolor">Home</router-link> |
          <router-link to="/about" tag="button" active-class="changecolor">About</router-link> -->
          <!-- <button>显示主页</button>
          <button>显示about页面</button> -->
          <!-- <button @click="gohome">首页</button>
          <button @click="goabout">about</button> -->
          <!-- <router-link to="/pagehome">首页</router-link>  -->
          <!-- <router-link to="/about">关于</router-link>  -->
          <!-- <router-link :to="'/user/'+userid">用户界面</router-link>  -->
          <!-- <router-link>新组件</router-link>  -->
          <router-link :to="{
            path: '/profile',
            query:{
              name: '里巴巴'
              ,age: 22
              ,sex: 1
            }
          }">个人信息</router-link>
        </div>
        <router-view/>
    
      </div>
    </template>
    <script>
    export default {
        name: 'App'
        ,data(){
          return {
            userid: 'zhangsan1'
          }
        }
    }
    </script>
    <style>
      .changecolor{
        color:red;
      }
    </style>
    
    
  4. 运行效果

在这里插入图片描述

R o u t e 和 R o u t e r 的 区 别 Route和Router的区别 RouteRouter

R o u t e 是 处 于 活 跃 的 路 由 , R o u t e r 是 v u e 使 用 的 模 块 。 具 体 还 得 网 上 找 文 章 对 源 码 进 行 分 析 Route是处于活跃的路由,Router是vue使用的模块。具体还得网上找文章对源码进行分析 RouteRoutervue使

导航守卫

​ 俗称:对来回跳转过程进行监听。就是监听用户点击什么路径,从A跳到B。

案例 点击组件,浏览器需要更新对应页面标题

重点在于代码末尾的 - -使用全局导航守卫。

路由对象中name和meta可以两个选一个,在这里,我选route的name属性。

import Vue from 'vue'
import VueRouter from 'vue-router'
// import Home from '../components/HelloWorld.vue'
// import about from '../components/about.vue'
// import user from '../components/test.vue'
//先使用 vue的uuse来使用vueroute
Vue.use(VueRouter)
//定义route路由
  const routes = [
    {
      path: '/',
      redirect: '/pagehome'
    },
    {
      path: '/profile',
      name: '个人简介',
      component: () => import('../components/Profile.vue')
      ,meta: { 
        title: '个人简介'
       }
    },
  {
    path: '/pagehome',
    name: '首页',
    component: () => import('../components/HelloWorld.vue')
    ,meta: { 
      title: '首页'
     }
  },
  // {
  //   path: '/about',
  //   name: 'About',
  //   // route level code-splitting
  //   // this generates a separate chunk (about.[hash].js) for this route
  //   // which is lazy-loaded when the route is visited.
  //   路由懒加载
  //   component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  // }
  {
    path: '/about',
    name: '关于',
    component: () => import('../components/about.vue'),
    meta: { 
      title: '关于'
     },
    children:[
      {
        path: 'aboutSub',
        component: () => import ('../components/test2.vue')
        ,meta: { 
          title: '关于的子组件'
         }
      }
    ]

  },
  {
    path: '/user/:userId',
    name: '个人中心',
    
    component: () => import('../components/test.vue')
    ,meta: { 
      title: '个人中心'
     }
  }
  
]
//history模式就是我们学的history的go,reward。pushState。replaceState啊等。
const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes,
  activeClass: 'changecolor'
})
//使用全局导航守卫
router.beforeEach((to,from,next)=>{
  document.title = to.name;
  next()

})
//导出route组件
export default router

运行结果如下:
在这里插入图片描述

方法2:使用match的数组对象来进行改变值:

//使用全局导航守卫
router.beforeEach((to,from,next)=>{
  // document.title = to.name;
    //使用方法2,从匹配对象中进行获取其标题值
  document.title = to.matched[0].meta.title;
  next()
})

运行效果同上。

在这里插入图片描述

导航守卫可以配置类似拦截器的功能。可以使用前置钩子函数后置钩子函数进行登入或者权限校验的判断。

使用keep-alive对组件不进行销毁,下面假设先不使用keep-alive进行查看情况,看组件会不会销毁:
在这里插入图片描述

可以看到,当点击其他route时,组件会被销毁。

在加入keep-alive后,app.vue代码如下:

<template>
  <div id="app">
    <div id="nav">
      <!-- <router-link to="/pageHome" tag="button" active-class="changecolor">Home</router-link> |
      <router-link to="/about" tag="button" active-class="changecolor">About</router-link> -->
      <!-- <button>显示主页</button>
      <button>显示about页面</button> -->
      <!-- <button @click="gohome">首页</button>
      <button @click="goabout">about</button> -->
      <!-- <router-link to="/pagehome">首页</router-link>  -->
      <!-- <router-link to="/about">关于</router-link>  -->
      <!-- <router-link :to="'/user/'+userid">用户界面</router-link>  -->
      <!-- <router-link>新组件</router-link>  -->

        <router-link :to="{
        path: '/profile',
        query:{
          name: '里巴巴'
          ,age: 22
          ,sex: 1
        }
      }">个人信息</router-link>
    
    </div>
    <keep-alive>
      <router-view/>
    </keep-alive>
  </div>
</template>
<script>
export default {
    name: 'App'
    ,data(){
      return {
        userid: 'zhangsan1'
      }
    }
}
</script>
<style>
  .changecolor{
    color:red;
  }
</style>

运行效果如下:

在这里插入图片描述

可以看到,首页组件保持了活跃状态。

keep-alive常用属性:

在这里插入图片描述

指定一些组件不缓存或者缓存,使用:

修改profile组件代码:

<template>
    <div>
        <h3>通过query来获取 参数 数据</h3>
        <h5>
            {{$route.query}}
        </h5>
    </div>
</template>
<script>
export default {
  name: 'profile'
  ,beforeCreate () {
    console.log("proifle被创建")
  } 
  ,beforeDestroy () {
    console.log("profile组件被销毁")
  }
}
</script>
<style  scoped>

</style>

修改app.vue

<template>
  <div id="app">
    <div id="nav">
      <!-- <router-link to="/pageHome" tag="button" active-class="changecolor">Home</router-link> |
      <router-link to="/about" tag="button" active-class="changecolor">About</router-link> -->
      <!-- <button>显示主页</button>
      <button>显示about页面</button> -->
      <!-- <button @click="gohome">首页</button>
      <button @click="goabout">about</button> -->
      <!-- <router-link to="/pagehome">首页</router-link>  -->
      <!-- <router-link to="/about">关于</router-link>  -->
      <!-- <router-link :to="'/user/'+userid">用户界面</router-link>  -->
      <!-- <router-link>新组件</router-link>  -->

        <router-link :to="{
        path: '/profile',
        query:{
          name: '里巴巴'
          ,age: 22
          ,sex: 1
        }
      }">个人信息</router-link>
    
    </div>
    <keep-alive exclude="profile">
      <router-view/>
    </keep-alive>
  </div>
</template>
<script>
export default {
    name: 'App'
    ,data(){
      return {
        userid: 'zhangsan1'
      }
    }
}
</script>
<style>
  .changecolor{
    color:red;
  }
</style>

运行:

在这里插入图片描述

可以看到,虽然我们使用了keep-alive,但是已经将profile组件排除在外了,不对此组件进行缓存。

Vue学习笔记-导航守卫
木玄客的博客
01-06 864
每个导航守卫都有三个参数: to: Route: 即将要进入的目标路由对象 from: Route: 当前导航正要离开的路由 next: Function: 必须调用该方法resolve这个钩子。执行效果依赖next方法的调用参数 next(): 进行管道的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed(确认的)。 next(false): 断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按...
vue的三种导航守卫,元数据meta的应用
封景的博客
05-05 1475
导航守卫 vue-router提供的导航守卫,守护每一次跳转 其本质是函数,当导航发生变化时自动执行 导航守卫分为三个级别 全局导航守卫 单个路由独享的导航守卫 组件级别的导航守卫 全局导航守卫 可以使用router.beforeEach注册一个导航守卫,进入路由之前触发,当用户满足条件时,才可以进入导航,否则取消跳转。 我用到的一个导航守卫的案例是:当用户每次发送请求时都要从本地获取token然后,后端会判断token是否存在并判断token是否过期,这样本身就是一件非常麻烦的事情每次都要携带toke
Vue-路由-传递参数-$route-$router-导航守卫-beforeEach
超级氯化钾的博客
04-24 605
传递参数 两种方式:params和query params的类型 * 配置路由格式: `/router/:id` * 传递的方式:在path后面加上对应的值 * 传递后形成的路径:` /router/123`, `/router/abc` 1.首先编写User.vue组件 2. App.vue 有一个router-link :to="'/user/'+userId",界面链接显示 3. router->index.js 配置/user/:id 路由映射方式,这样就根据userid映射成功了 4.
Vue---- 路由(下)-- 导航守卫
最新发布
zhang_mou_r的博客
07-13 946
全局守卫分为两种:全局前置守卫:当一个导航触发时,就会触发全局前置守卫;可以在全局前置守卫做出业务逻辑处理; 全局后置钩子:当一个导航触发时,会触发全局前置守卫,同样,会触发全局后置钩子,因为进入一个新的,必定要离开一个旧的。但是,后置钩子不会改变导航本身;
vue-router参数传递、全局导航守卫vue-router-keep-alive、Promise的使用
骨子里的偏爱
06-06 366
vue-router参数传递、全局导航守卫vue-router-keep-alive、Promise的使用
vue-router参数传递--vue-router-全局导航守卫
qq_25741071的博客
06-23 540
文章目录通过按钮进行跳转通过代码传递数据传递参数的方式获取参数传递参数方式二:JavaScript代码传递传递参数方式一:router-link数据单一则使用params数据比较多时 使用query 【对象传递】vue-router-全局导航守卫 通过按钮进行跳转 通过代码传递数据 写成对象类型 传递参数的方式 获取参数 传递参数方式二:JavaScript代码传递 传递参数方式一:router-link 数据单一则使用params 数据比较多时 使用query 【对象传递】
Vue路由Vue Router创建、传递参数路由守卫
DOM曼珠沙华的博客
04-01 2428
使用路由前先需要安装vue-router: 命令为:npm install veu-router --save 1.路由创建: 需要提供的配置文件:在项目的src目录下创建router.js文件,也可以直接添加进App.vue。如果选择配置router.js文件,需要将其导入App.vue内。 在使用前需要导入vue-router并进行使用。 importRout...
vue-router 实现导航守卫(路由卫士)的实例代码
12-04
Vue Router 是 Vue.js 应用的官方路由管理库,它提供了强大的导航控制功能,其导航守卫(Navigation Guards)是实现路由保护的一种机制。这些守卫允许你在路由发生改变时执行逻辑,如验证用户权限、加载数据等...
Vue-5 路由参数的传递和获取(query 和 params),导航守卫和路由元信息,History模式
锋利的二丫
08-02 7183
Vue-5 路由传参的几种方式(query和params),获取路由参数导航守卫和路由元信息,History模式 除了 props 和 $emit 之外,路由时也可以携带数据,即通过路由传参。 一、路由参数的传递和接收 1. 动态路由的匹配 示例需求:有个商品详情的组件,点击任何商品都会渲染这个组件,点击商品时向详情组件传递商品的 id,详情组件在被渲染时接收这个 id,请求对应的数据,渲染在详...
Vue路由守卫导航守卫
好好学习,天天向上!
01-11 1696
正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程: 全局的, 单个路由独享的, 或者组件级的。 全局守卫 全局前置守卫 router.beforeEach 全局解析守卫router.beforeResolve 全局后置钩子router.afterEach 全局前置守卫 你可以使用 router.beforeEach 注册一个全局前置守卫: const router = new VueRouter({ ... }) router.bef.
vue-router导航守卫全解析
黑山老妖的小站
08-13 595
导航守卫 vue-router实例方法提供了守卫导航的方法,可以将我们的代码逻辑植入到路由导航过程。主要分为全局、单个路由共享、组件级 全局 router.beforeEach() 作用:导航前置守卫 在路由跳转之前进行判断和拦截,一般用来做一些进入页面的限制,比如未登录不能进入某些页面 当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 等待参数 to:Route对象,即将要进入的目标 from:Route,当前要离开的路由
VUE3----Vue Router 4.x 路由守卫
王延朕的博客
04-12 1791
全局路由守卫与独享路由守卫 import {createRouter, createWebHashHistory} from "vue-router"; const routes=[ { path:'/home', component:()=>import('@/pages/home'), meta:{ isAuth:true, title:'首页' }, }, {
Vue路由给每个页面添加参数【id为例子】全局路由前置守卫
芽子的博客
09-04 2994
to是跳转后的页面路由,from是跳转前的,next是必须要执行的,加上next路由才会跳转 replace跳转的时候拼参数next要添加replace true this.$router.replace({ name: “Triping”, query: { routerAction: ‘replace’ } }) // replace跳转的时候拼参数next要添加replace true let routerReplace = to.query.routerAction === ‘replace’ ?
导航守卫、路由传参以及跳转
m0_60782710的博客
04-25 1211
1、 router-link 进行页面按钮式路由跳转 (点击链接实现导航的方式,叫做声明式导航。) 2、 this.$router.push进行编程式路由跳转(调用 API 方法实现导航的方式,叫做编程式导航。) 3、 this.$route.params获取路由传递参数 4、 this.$route.query获取路由传递参数 5、 params 和 query 都是传递参数的, params不会在url上面出现,并且params参数是路由的一部分, 是一定要存在的...
vue其他相关】路由相关方案:如何统一给所有路由加上参数参数改变后如何触发组件切换
庞囧的博客
05-07 3003
文章目录问题场景beforeEach全局守卫底层函数劫持 问题场景 可能有些情况,我们需要路由从上游链带参数一直传下去,所以全局的路由需要动态自动添加固定参数。 beforeEach全局守卫 const query = { id: ‘1’ } //这是全局需携带参数 router.beforeEach((to,from,next)=>{ to.query.id ? next() : next({…to.query, …query}) //这句条件判断有一层的用意是,如果第一次加了参数后,会再次触
Vue路由守卫的三种方式,及其钩子函数和参数
chenxiaoyu97的博客
07-05 6737
1)、全局守卫 全局守卫有前置守卫和后置守卫,是vueRouter对象的两个钩子函数,分别是 beforeEach和afterEach。 ​ 前置守卫: router.beforeEach((to, from, next) => { // to: 目标路由 // from: 当前路由 ​ // next() 跳转 一定要调用 next(false);//不让走 next(true);//继续前行 next('/login')//走哪
vue router添加自定义参数
mrliucx的博客
04-09 2648
通常需要在router里面添加参数用于特定的场景,但是官方提供的API只给出几个参数 在meta里面自定义添加参数即可 动态参数需要在动态路由里添加 取值从meta取值即可
Vue VueRouter、路由的使用、路由守卫(笔记)
weixin_60547084的博客
04-22 3632
文章目录1. 单页面应用(SPA)2. 路由的理解2.1 什么是路由2.2 路由分类3. 路由的安装与搭建4. 路由的使用4.1 基本使用4.2 嵌套(多级)路由4.3 路由传参5. 路由命名与元信息5.1 命名路由5.2 路由元信息6. 路由的props配置7. 编程式路由导航8. 缓存路由组件9. 路由守卫9.1 路由配置信息9.2 全局路由守卫9.3 路由独享守卫9.4 组件内的守卫9.5 完整的导航解析流程10. 路由器的两种工作模式11. 路由懒加载 1. 单页面应用(SPA) SPA (sin
vue路由守卫和路由传参详解
weixin_51855875的博客
04-14 813
路由守卫、路由传参
vue route功能介绍
05-13
Vue Router是Vue.js官方提供的路由管理器。它通过对URL的解析来实现前端路由的功能,可以让我们在不刷新页面的情况下,动态切换页面内容,实现单页应用的效果。 Vue Router提供了以下功能: 1. 嵌套路由:可以在一个组件定义子路由,从而实现多层嵌套的页面结构。 2. 命名路由:可以给路由规则起一个名称,方便在程序进行引用。 3. 动态路由:可以根据参数的不同,动态地渲染不同的页面。 4. 路由传参:可以通过路由跳转时传递参数,方便页面间的数据传递。 5. 导航守卫:可以在路由跳转前、后或者取消时执行一些逻辑,例如验证用户登录状态等。 通过Vue Router的这些功能,我们可以方便地实现前端路由的功能,从而提升用户体验和页面性能。
写文章

热门文章

  • vue使用axios出现Network Error或者404 41520
  • SpringBoot 中,Mybatis sql查询数据不空,但是返回的对象为Null 8581
  • layui进度条element.progress无效解决方法 7305
  • 更新electron的版本 4405
  • java之数据管理系统软件 3698

分类专栏

  • C++/C/JAVA 算法 2篇
  • 前端 15篇
  • 云服务器
  • 好用的工具 2篇
  • PHP 1篇
  • 桌面应用 4篇
  • 单片机
  • 计算机考研
  • 操作 2篇
  • java 23篇
  • 数据库 1篇
  • 持久化 1篇

最新评论

  • java执行cmd命令并输出命令对应结果

    云风科技CEO_张莽: 请问你的process.waitfor(), 的process是如何定义的呢? 谢谢

  • vue使用axios出现Network Error或者404

    kjkbj: 帅,卡了我好几个小时加了@CrossOrigin一下就解决了

  • layui进度条element.progress无效解决方法

    my_xuexi: 大佬,我用弹出层显示进度条,进度条有了,但是百分比死活不显示。不用弹出层就可以显示百分比

  • 基于PHP的定时交作业系统

    JS丶Tsukasa: 感觉好棒,可以发一下源码吗?希望学习一下 2677299914@qq.com 谢谢

  • 基于SpringBoot编写增删查改一套接口

    Aicrazy.: 有没有图片的接口编写呀

大家在看

  • [原创未发表]Matlab 基于Transformer-LSTM-SVM多变量回归预测 (多输入单输出)
  • 犀牛数据爬虫逆向分析
  • scala中break和continue的区别 335
  • 【学习笔记】手写 Tomcat 五 57
  • 《动手学深度学习》笔记1.6——多层感知机→代码实现 1779

最新文章

  • vue axios封装和详细使用
  • vue使用axios出现Network Error或者404
  • vue封装导航栏组件
2020年41篇
2019年6篇
2018年2篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家西安小区玻璃钢雕塑厂家塔城玻璃钢雕塑制作厂家菏泽铸铜玻璃钢景观雕塑玻璃钢雕塑定制源头工厂党建文化玻璃钢人物雕塑哪家便宜成都欧式玻璃钢雕塑优势陕西景观玻璃钢雕塑价格德惠模压玻璃钢花盆仪征玻璃钢雕塑制作厂家朝阳抗冻沈阳玻璃钢花盆玻璃钢花盆园林兰州玻璃钢校园雕塑制作惠州会发光的玻璃钢雕塑山东户外商场美陈采购钦州玻璃钢花盆许昌玻璃钢景观雕塑设计重庆大型玻璃钢雕塑图片静安区小型玻璃钢雕塑玻璃钢雕塑上色维修垫江县玻璃钢雕塑集宁玻璃钢景观雕塑神农架玻璃钢雕塑厂家甘南仿真人物玻璃钢雕塑公司四会玻璃钢花盆花器苏州玻璃钢雕塑摆件制造翻制玻璃钢雕塑多少钱句容玻璃钢卡通座椅雕塑广西玻璃钢雕塑制作河南季节性商场美陈订购长春火烈鸟玻璃钢雕塑制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化