• 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

     

  • 相关阅读:
    MySQL数据库入门到大牛_04_运算符
    SpringBoot实现1对1、1对多、多对多关联查询——基于SpringBoot和Vue的后台管理系统项目系列博客(十八)
    两个指数函数乘积的定积分
    python连接数据库失败怎么解决
    java-net-php-python-jsp生活用品购物系统计算机毕业设计程序
    【C++】多态 — 多态的原理 (下篇)
    ELECTRA:Pre-training Text Encoders as Discriminators Rather Than Generators
    【.NET】简单使用Description特性
    了解CV和RoboMaster视觉组(五)参数自适应方法和稳健特征
    搭建强化学习的机械臂MuJoCo环境以及urdf转xml文件方法
  • 原文地址:https://blog.csdn.net/m0_65208646/article/details/126197438