首页 > 其他分享 >vue-router

vue-router

时间:2024-04-01 11:44:07浏览次数:26  
标签:vue component path router Login login 路由

  • [ 什么是vue-router ]
  • 传统的路由是针对服务器不同文件,这样路由的变动就会导致新页面加载,导致页面刷新。vue-router 实现了在 vue 组件基础上,不加载页面文件,而是更改部分页面组件的方式来展现不同路由时显示的内容。同时节约了客户端和服务端资源。

  • [ 安装 ]
  •   npm i vue-router@4
    

  • [ 使用 ]
    • vue-router 是通过 hook 的方式获取 router 对象并完成配置,然后以插件的方式挂载到app上面
      // router.js
      import { createRouter, createWebHistory} from 'vue-router'
      import Login from '../components/Login'
      import Register from '../components/Register'
      const routes = [
        {
          path: '/login',
          name: 'Login'
          component: Login
        },
        {
          path: '/register',
          name: 'Register'
          component: Register
        }
      ]
      const router = createRouter({
        history: createWebHistory(),
        routes
      })
      export default router
    
    • 在 main.js 中挂载
      // main.js
      import router from './router'
      app.use(router)
    
    • 在组件中使用路由
      // App.vue
      <router-link to="/login">Login</router-link>
      <router-link to="/register">Register</router-link>
      <hr>
      // router-view 是显示组件的地方,也就是显示 Login 或者 Register 内容的地方
      <router-view></router-view>
    
    • 事件触发跳转
      <template>
        // 方式一 二
        <button @click='toPage('/login')'>Login</button>
    
        // 方式三
        <button @click='toPage('Login')'>Login</button>
      </template>
      <script>
        import { userouter } from 'vue-router' 
        const router = userouter()
    
        // 方式一
        function toPage(url) {
          // 通过 push 方法实现跳转
          router.push(url)
        }
    
        // 方式二
        function toPage(url) {
          // 传入一个对象
          router.push({
            path: url
          })
        }
    
        // 方式三
        function toPage(name) {
          router.push({
            name
          })
        }
      </script>
    

  • [ 路由模式及其不同 ]
    • createWebHistory || createWebHashHistory
    • 如果在login页面里面采用 WebHistory,那么 '/' 路径代表的就是localhost
    • 而如果采用WebHashHistory,那么 '/' 路径代表 localhost/login#/
    • 如果是单页面文件,选择 WebHistory 会简洁一点
    • 如果是多页面文件, WebHashHistory 更容易区分前端路由和后端路由. 当然 WebHistory 也可以,个人更倾向于 WebHistory

  • [ 给路由命名 ]
  •   const routes = [
        {
          path: '/login',
          name: 'Login', // 给路由命名
          component: Login
        },
        {
          path: '/register',
          name: 'Register',
          component: Register
        }
      ]
    
    • 对应的跳转方式
      <router-link :to="{name: 'Login'}">Login</router-link>
    

  • [ 历史记录的处理 ]
  • [ 不加入历史记录 ]
    • 如果页面跳转不想被历史记录 需要加入 replace 属性给 router-link
      <router-link replace to='/login'>Login</router-link>
    
    • 事件跳转不加入历史记录,将 push 方法更变为 replace 方法即可
      router.replace('/login')
    

  • [ 控制页面跳转到历史记录 ]
  •   router.go(n) // 跳转到历史记录向后 n 个记录的页面
      router.back(n) // 跳转到历史记录向前 n 个记录的页面
    

  • [ 如何通过路由传参 ]
    • 通过在 push 或者 replace 方法 中传入的对象里面加入 query 或者 params 属性的方式可以传参
    • 在组件中,通过 router.query.xxx || router.params.xxx 来获取参数

  • [ query ]
    • 这种方式在地址栏的 url 中会携带参数并显示出来
      router.push({
        path: '/info',
        query: item
      })
    
      // info
      <div>Price: {{ router.query.price }}</div>
    

  • [ params ]
    • 这种方式 url 不会携带参数
      router.push({
        name: 'Info',
        params: item
      })
    
      // info
      <div>Price: {{ router.params.price }}</div>
    

  • [ 动态传参 ]
    • 在设定路由的时候,可以添加一个动态参数
      const routes = [
        {
          path: '/detial/:id'
          component: Detial
        }
      ]
    
    • 在传参的时候传入包含对应参数的对象即可
      const id = item.id
      router.push({
        path: '/detial'
        query: {
          id
        }
        // OR
        query: item
      })
    
    • params 方式也可以实现动态传参

  • [ 多级路由嵌套 ]
    • 通过 children 属性来实现路由嵌套
      const routes = [
        {
          path: '/user'
          component: User,
          children: [
            {
              path: '/login'
              component: Login
            }
          ]
        }
      ]
    

  • [ 命名视图 ]
    • 通过命名视图,一个路径可以对应多个视图组件,并且可以通过名称进行控制
      import Login from '../components/Login'
      import Register from '../components/Register'
      const routes = [
        {
          path: '/login'
          // 这里 component 是一个对象
          component: {
            login: Login
          }
        },
        {
          path: '/register'
          // 这里 component 是一个对象
          component: {
            register: Register
          }
        }
      ]
    
      <template>
        <router-view name='login'></router-view>
        <hr>
        <router-view name='register'></router-view>
      </template>
    

  • [ 重定向 和 别名 ]
  • [ 重定向 rediret ]
  •   const routes = [
        {
          path: '/'
          rediret : '/login'
    
          // OR
          rediret: {
            path:'/login'
          }
    
          // OR
          rediret: to => { // to 是被重定向的路由信息
            return {
              path: '/login'
              query: xxx // 这里可以传参
            }
          }
        },
        {
          path: '/login'
          component: ...
        }
      ]
    

  • [ 别名 alias ]
  •   const routes = [
        {
          path: '/',
          alias: ['/root'] // 这里设置别名后,访问 /root 就相当于访问 /
        }
      ]
    

  • [ 导航守卫 ]
    • 导航守卫是

  • [ 前置守卫 ]
  • [ 后置守卫 ]
  • [ 路由元信息 ]
  • [ 过渡动效 ]
  • [ 动态路由 ]
  • 标签:vue,component,path,router,Login,login,路由
    From: https://www.cnblogs.com/anch/p/18108078

    相关文章

    • vue表单点击按钮增加或者删除一行
      vue表单点击按钮增加或者删除一行不需要动态改变的就不用放在一个form-item中,可以单独写一个form-item。需要点击增加和删除的表单项目可以用v-for来循环渲染。<a-form:label-col="{span:8}":wrapper-col="{span:12}"> <a-form-itemlabel="服务器名称">......
    • 【前端面试3+1】07vue2和vue3的区别、vue3响应原理及为什么使用proxy、vue的生命周期
      一、vue2和vue3的区别1.性能优化:        Vue3在性能方面有很大的提升,主要是通过虚拟DOM的优化和响应式系统的改进实现的。虚拟DOM重构:Vue3中对虚拟DOM进行了重构,使得更新算法更加高效,减少了更新时的开销,提升了性能。静态树提升:Vue3可以通过静态树提升技术......
    • vue3 点击按钮跳转到对应的tab页面
       大家好呀,我又来记录一下啦实现功能:点击”查看“按钮,跳转到对应的tab页面方法:router按钮部分:<el-buttonsize="small"@click="check(scope.row.name)">查看</el-button>对应的方法:check(){this.$router.push({path:'/about'})},router:import......
    • 从虚拟dom知识无痛深入vue与react的原理
       我们都知道像vue、react都有用到虚拟dom,那么虚拟dom到底是什么?框架为什么不直接操作真实dom而要在中间要引入虚拟dom呢?vue和react的虚拟dom又有什么异同呢?我们就从虚拟dom开始讲起,再来逐步引入讲解vue与react的部分原理及其异同,这里会顺便讲解到数据驱动视图及视图驱动数据,......
    • vue-路由详解
      路由vue-router1.对路由的理解:vue的一个插件库,专门用来实现SPA应用2.对SPA应用的理解:1.单页web应用2.整个应用只有一个完整的页面(index.html)3.点击页面中的导航链接不会刷新页面,只做页面的局部更新4.数据需要通过ajax请求获取3.什么是路由?1.......
    • Vite + Vue3 项目的创建 ,启动 ,停止
      第一步:使用命令行创建工程在磁盘的合适位置上,创建一个空目录用于存储多个前端项目用vscode打开该目录在vocode中打开命令行运行如下命令npmcreatevite@latest第一次使用vite时会提示下载vite,输入y回车即可,下次使用vite就不会出现了注意:选择vue+JavaScript选项即可......
    • 数据下钻--vue+springboot+echarts
      今天下午整了下数据下钻直接上成果: 然后左边可以选范围:左边调范围,然后对应的会显示那些省份满足条件。 然后就是鼠标悬停在某个省份,就显示相应数量: 然后可以点击对应省份进行下钻到市然后可以继续下钻到县:  同样的呢,市和县都可以向省一样那样显示范围和调试: ......
    • 基于ssm+vue.js的酒店预约及管理系统附带文章和源代码设计说明文档ppt
      文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我成功案例代码参考数据库参考源码获取前言......
    • 基于ssm+vue.js的校园招聘系统附带文章和源代码设计说明文档ppt
      文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我成功案例代码参考数据库参考源码获取前言......
    • 基于ssm+vue.js的宠物医院管理系统附带文章和源代码设计说明文档ppt
      文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我成功案例代码参考数据库参考源码获取前言......