• vue知识点——路由


    一、路由--vue.js

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

    通过 Vue.js 可以实现多视图的单页Web应用(single page web application,SPA)。

    Vue.js 路由使用前需要载入vue-router库

    二、安装

    1、 直接下载 / CDN

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

    2、 NPM

    cnpm install vue-router

    三、组件- 

      是一个组件,该组件用于设置一个导航链接,切换不同 HTML 内容。 to 属性为目标地址, 即要显示的内容。

    相关属性

    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 记录。

    <router-link :to="{ path: '/abc'}" replace>router-link>

     3、append

    设置 append 属性后,则在当前 (相对) 路径前添加其路径。例如,我们从 /a 导航到一个相对路径 b,如果没有配置 append,则路径为 /b,如果配了,则为 /a/b

    <router-link :to="{ path: 'relative/path'}" append>router-link>

    4、tag

    有时候想要  渲染成某种标签,例如 

  • 。 于是我们使用 tag prop 类指定何种标签,同样它还是会监听点击,触发导航。

    1. <router-link to="/foo" tag="li">foorouter-link>
    2. <li>fooli>

    5、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 1router-link>
    8. <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2router-link>
    9. p>

    注意这里 class 使用 active-class="_active"。

    四、路由配置 /router/index

    1、普通路由配置

    1. {
    2. path: '/user', //配置的路径
    3. name: 'user', //名称
    4. component: () => import('xxx)
    5. }

     

    2、路由传参

    1. <router-link to='.product/abc'>
    1. 在页面中获取
    2. $route.params.id

     3、404页面

    1. <template>
    2. <div>
    3. <h1>404h1>
    4. <p>您的页面被外星人绑架了!p>
    5. <router-link to="/">回首页router-link>
    6. div>
    7. template>
    1. // 404的path为* 配置在最后面
    2. {
    3. path: "*",
    4. name: "nomatch",
    5. component: () => import('../views/NoMatch.vue')
    6. }

    五、编程式路由跳转 $router

    1、前进

    • $router.forward()
    • $router.go(1)

     2、后退

    • $router.go(-1)
    • $router.back()

    3、切换路由

    $router.push('/about')

    4、替换路由

     $router.replace('/about')

     六、路由信息 $route

    • 路由参数 params
    • 查询 query
    • 地址 path
    • 全地址 fullPath
    • 名称 name
    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>

    七、路由守卫

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

     1、组件内部

    • 进入前 beforeRouterEnter(to,from,next)
    • 离开前 beforeRouterLeave
    • 更新前 beforeRouterUpdate
    •  to要进入的路由
    • from从哪个页面进入
    • next下一步
    • next()进入to页面
    • next(true)进入to页面
    • next(false)不跳转
    • next("/login")跳转到登录
    1. beforeRouteLeave(to,from,next){
    2. // to 要去的页面
    3. // from 从哪个页面离开
    4. // next下一步(必须要执行)
    5. var flag = window.confirm("亲,商品价格是本年度最低价格,确定也放弃优惠吗?");
    6. if(flag){
    7. next();//进入下一页面
    8. }else{
    9. next(false);//不离开
    10. }
    11. }

     2、全局守卫

    1. //写在路由配置中
    2. //希望好几个页面都需要验证是否登录
    3. router.beforeEach((to, from, next) => {
    4. if (to.meta.requireAuth) {
    5. //如果需要全限,判断
    6. if (localStorage.getItem("token")) {
    7. //如果没有token放行
    8. next(true);
    9. } else {
    10. //跳转到登录页面添加redirect
    11. next('/login?redirect' + to.path)
    12. }
    13. } else {
    14. //直接放行
    15. next(true);
    16. }
    17. })
    18. router.afterEach((to, from) => {
    19. console.log(from, '离开前')
    20. })

    八、路由元信息

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

    九、路由查询参数

    1、传递

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

    2、获取

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

     

  • 相关阅读:
    低代码开发平台哪些好用
    CV每日论文--2024.6.4
    面试题——RabbitMQ
    适合零基础小白学的 Python 教程,视频或者书籍都可以?
    Spark分布式计算原理
    vue入门简单学习
    el-table固定指定的行
    分享13个游戏源代码总有一个是你想要的
    数字 IC 验证(1)UVM 验证技术
    产品-Axure9英文版,A页面内a1状态跳转B页面的b2状态,(条件跳转状态)
  • 原文地址:https://blog.csdn.net/m0_65208646/article/details/126197438