首页 > 其他分享 >vue-router

vue-router

时间:2024-05-04 19:44:39浏览次数:25  
标签:vue name 跳转 path 组件 router 路由

【一】Vue-router介绍

​ vue-router是vue的页面的链接路径管理系统。由于Vue开发时对路由支持不足,于是官方补充了vue-router插件。vue的单页面应用(SPA)是基于路由和组件的,路由用于设定访问路径,并且将路径和组件映射起来。

​ 传统的页面应用是用一些超链接来实现页面的切换和调转的。在vue-router的单页面应用中,则是路径之间的切换,实际上就是组件的切换。

【二】安装

【1】安装命令

npm install vue-router

【2】创建组件

​ 如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能,用vue-cli生产了我们的项目结构,src文件目录下会有一个router文件夹,此处就是编写路由组件的地方。在src/router/index.js,这个文件就是路由的核心文件:

import Vue from 'vue'   //引入Vue
import Router from 'vue-router'  //引入vue-router
import Hello from '@/components/Hello'  //引入根目录下的Hello.vue组件
 
Vue.use(Router)  //Vue全局使用Router
 
export default new Router({
  routes: [              //配置路由,这里是个数组
    {                    //每一个链接都是一个对象
      path: '/',         //链接路径
      name: 'Hello',     //路由名称,
      component: Hello   //对应的组件模板
    },{
      path:'/hi',
      component:Hi,
      children:[        //子路由,嵌套路由 (此处偷个懒,免得单独再列一点)
        {path:'/',component:Hi},
        {path:'hi1',component:Hi1},
        {path:'hi2',component:Hi2},
      ]
    }
  ]
})

【3】全局组件

-html:全局组件:
    -<router-view></router-view>  # 显示页面组件
    -<router-link></router-link>  # 路由跳转【相当于a标签】
-js中:
    this.$router  # 路由对象,路由跳转
    this.$route   # 当前路由对象,跳转携带数据,从这里取出来

【三】简单路由跳转

【1】通过组件跳转

<el-button @click="handleAbout">按钮跳关于</el-button>

【2】通过路由js跳转

<el-button @click="handleAbout">按钮跳关于</el-button>


<script>
export default {
  name: 'HomeView',
  methods: {
    handleAbout() {
      this.$router.push('/about')
    }
</script>

【四】高级路由跳转

【1】路由js跳转--传对象

// 对象里面放path
handleAbout2(){
      this.$router.push({
        path:'/about' 
      })
    }

// 根据别名跳转 name
    handleAbout2(){
      this.$router.push({
        name:'about'
      })
    }
  },
      
// 携带数据 在?后面的数据
          handleAbout2() {
      this.$router.push({
        name: 'about',
        query: {name: this.name} //数据会携带在地址栏中问号?后面						http://192.168.1.24:8080/about?name=green
      })
    }
  },
      
// 获取携带的数据,通过this.$route.[数据键名],$route是当前路由对象
// 在about页面组件中
  data(){
    return{
      name : ''
    }
  },
  created() {
    this.name = this.$route.query.name
      // 这样就能拿到数据
  },
      

// 携带数据在地址栏中 不是?后面的参数
// 首先需要在路由组件中绑定
const routes = [
    {
        path: '/',
        name: 'home',
        component: HomeView
    },
    {
        path: '/about/:id', // 用冒号:绑定变量 之后就需要在地址栏后面跟一个数据才能访问 就像django路由层的转换器
        name: 'about',
    },
    
// 
    
// 给跳转按钮配置 params属性
    handleAbout2() {
      this.$router.push({
        name: 'about',
        params: {id:this.id}
      })
      
// 取出params属性值
export default {
  name: 'about',
  data() {
    return {
      id: ''
    }
  },
  created() {
    this.id = this.$route.params.id  // 通过params.属性名取值
  },
}

【2】通过标签跳转--传对象

可以用在to前面价格冒号将其绑定到某个对象上,那么就可以这个对象里面定义name,query,params等

<router-link :to="{}">点我跳转关于页面关于</router-link>

【五】路由嵌套--子路由

​ 常见的侧边栏样式就是用路由嵌套来实现的,点击左边的按钮,左边的内容不变,右边主题内容变化

/user/johnny/profile                     /user/johnny/posts
+------------------+                  +-----------------+
| User             |                  | User            |
| +--------------+ |                  | +-------------+ |
| | Profile      | |  +------------>  | | Posts       | |
| |              | |                  | |             | |
| +--------------+ |                  | +-------------+ |
+------------------+                  +-----------------+

【1】配置子路由

const routes = [
    {
        path: '/demo',
        name: 'demo',
        component: RouterDemoView,
        // 多级路由 用children属性配置,他是一个数组套对象
        // 需要有几个子路由就写几个对象
        children: [
            {	// path是子路由的路径
                path: 'home', // 此处不能写成/home,
                // component是子路由用到的组件
                component: HomeView2
            },
            {
                path: 'good', // 此处不能写成/good,
                component: GoodsView
            },
            {
                path: 'order', // 此处不能写成/order,
                component: OrdersView
            }
        ]
    }
]

【2】写路由子组件

略...

【3】配置路由跳转

<template>
  <div id="demo">
    <h1>路由嵌套</h1>
    <router-link to="/demo/home">
      <el-button>首页</el-button>
    </router-link>
    <br>
    <router-link to="/demo/good">
      <el-button>商品</el-button>
    </router-link>
    <br>
    <router-link to="/demo/order">
      <el-button>订单</el-button>
    </router-link>
	// 需要用 router-view标签来渲染子组件
    <router-view></router-view>
  </div>
</template>

【六】相关api

【1】VueRouter

VueRouter: VueRouter 类用于创建一个新的路由实例。

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    // 配置路由
  ]
})

【2】routes

routes: 路由配置数组,用于定义路由映射关系。

const router = new VueRouter({
  routes: [
    { path: '/home', component: Home },
    { path: '/about', component: About }
  ]
})

router-link: 用于在 Vue 组件中声明式导航到路由的组件。

<router-link to="/home">Home</router-link>
<router-link to="/about">About</router-link>

【4】router-view

router-view: 用于渲染匹配的路由组件。

<router-view></router-view>

【5】跳转

// push: 在编程式导航中使用,将新路由推送到历史记录栈中。
router.push('/home')

// replace: 在编程式导航中使用,替换当前路由而不是添加新条目。
router.replace('/home')

// go、back、forward: 控制浏览器历史记录的导航。
router.go(-1) // 后退一页
router.back() // 后退一页
router.forward() // 前进一页

【6】守卫

// beforeEach: 路由跳转前的全局守卫,可以用于执行某些验证或者拦截。
router.beforeEach((to, from, next) => {
  // ...
})

// beforeResolve: 在导航被确认之前,全局守卫。
router.beforeResolve((to, from, next) => {
  // ...
})

// afterEach: 导航成功完成后的全局钩子。
router.afterEach((to, from) => {
  // ...
})

【七】路由守卫

​ 当进行路由跳转的时候可能需要在路由跳转的不同阶段执行一些列逻辑或者操作,比如路由跳转前的权限校验,在导航被确认之前执行某些操作,以及在导航成功之后执行一些操作

​ 为了实现这些需求,Vue Router 提供了一些全局的导航守卫,其中就包括 beforeEachbeforeResolveafterEach 这三个 API。

【1】beforeEach

beforeEach 是一个全局的导航守卫,会在路由跳转之前被调用。您可以使用它来进行权限验证、路由拦截等操作。该方法接收三个参数:

  • to:即将跳转的目标路由对象;
  • from:当前导航正要离开的路由对象;
  • next:一个函数,用于告知 Vue Router 是否继续导航。调用 next() 表示继续导航,而调用 next(false) 或者传递一个路由路径表示取消导航,并将用户重定向到另一个路由。

下面是一个示例,演示如何在 beforeEach 中进行路由权限验证:

router.beforeEach((to, from, next) => {
  // 模拟权限验证逻辑
  const isAuthenticated = checkAuth() // 假设有一个函数用于检查用户是否已经登录
  if (to.meta.requiresAuth && !isAuthenticated) {
    // 如果路由需要登录权限而用户未登录,则重定向到登录页
    next('/login')
  } else {
    // 其他情况下继续导航
    next()
  }
})

【2】beforeResolve

beforeResolve 导航守卫与 beforeEach 类似,但是它会在路由导航被确认之前被调用,也就是在 beforeEach 和路由组件内守卫之后、导航被确认之前调用。这意味着在 beforeResolve 中的操作是在路由组件被解析之后,但在它们被渲染之前执行。

beforeResolve 方法的参数与 beforeEach 相同,它们的用法也非常类似。一般情况下,您可以使用 beforeEach 就可以满足大多数需求,但如果需要在组件解析之后执行某些操作,可以考虑使用 beforeResolve

【3】afterEach

afterEach 是一个全局的导航守卫,会在路由成功跳转之后被调用,不管是从哪个路由跳转到哪个路由,都会执行 afterEach 中的逻辑。它接收两个参数:

  • to:即将跳转的目标路由对象;
  • from:当前导航离开的路由对象。

​ 与 beforeEach 不同,afterEach 中不需要调用 next() 函数。您可以在 afterEach 中执行一些与导航完成后的清理工作、日志记录等操作

router.afterEach((to, from) => {
  // 在控制台中记录当前导航的信息
  console.log(`Navigated from ${from.path} to ${to.path}`)
})

标签:vue,name,跳转,path,组件,router,路由
From: https://www.cnblogs.com/Hqqqq/p/18172602

相关文章

  • Vuex
    【一】了解Vuex【1】想象一个场景如果你的项目里有很多页面(组件/视图),页面之间存在多级的嵌套关系,此时,这些页面假如都需要共享一个状态的时候,此时就会产生以下两个问题:多个视图依赖同一个状态来自不同视图的行为需要变更同一个状态【2】解决方案​ 对于第一个问题,假如是多......
  • Vue 3 setup
    【一】setup函数setup函数的设计是为了使用vue3的组合式api,setup函数必须要有返回值,在里面定义的变量必须要返回出去才能在html里面使用【1】定义变量setup(){//1.定义变量跟正常写js是一样的letname='hqq'letage=18//setup函数必须要有返回值......
  • Vue2基础
    【一】初识Vue【1】什么是VueVue是一套用于构建用户界面的渐(逐渐)进(递进)式JavaScript框架Vue可以自底向上逐层应用,由国人尤雨溪开发采用组件化模式,提高代码的复用率、让代码更好维护声明式编码方式,让编码人员无需直接操作DOM,提高开发效率使用虚拟DOM+优秀的Diff......
  • 混入、插件、插槽、vuex、本地存储
    【混入】#mixin(混入)功能:可以把多个组件共用的配置提取成一个混入对象,不需要在每个组件中都写了使用步骤   。。。【插件】1#1写plugins/index.js2importVuefrom"vue";3importaxiosfrom"axios";4importhunrufrom"@/mixin";......
  • ​ Vue Router
    VueRouter是Vue.js官方的路由管理器(路径跳转)。它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:嵌套的路由/视图表模块化的、基于组件的路由配置路由参数、查询、通配符基于Vue.js过渡系统的视图过渡效果细粒度的导航控制带有自动激活的C......
  • Vue入门到关门之组件
    一、组件1、什么是组件在Vue.js中,组件是构建用户界面的可重用和独立的模块。每个Vue组件都封装了自己的模板、逻辑和样式,使得代码可以更加模块化、可维护性更高。通过组件化,你可以将界面拆分成独立的、可复用的部分,每个部分都有自己的功能和样式,这样可以更容易地管理复杂的界面,......
  • Vue入门到关门之第三方框架elementui
    1、什么是ElementUI?ElementUI是一个基于Vue.js的组件库,它提供了丰富的UI组件和一套完整的解决方案,用于快速构建现代化的Web应用程序。ElementUI的目标是帮助开发者快速构建出美观、易用的界面,并提供了丰富的组件,包括但不限于按钮、表单、表格、对话框、菜单、导航、布......
  • Vue入门到关门之Vue项目工程化
    一、创建Vue项目1、安装node环境官网下载,无脑下一步,注意别放c盘就行Node.js—RunJavaScriptEverywhere(nodejs.org)需要两个命令npm---->pipnode--->python装完检查一下,helloworld检测,退出crtl+c2、搭建vue项目环境装cnpm这个包,下载东西会快很多,装模块......
  • VUE
    VUE(1)介绍VUE是渐进式框架可以一点一点地使用它,只用一部分,也可以整个工程都使用它Vue特点易用通过HTML、CSS、JavaScript构建应用灵活不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。高效20kBmin+gzip运行大小超快虚拟DOM最省心的优化(2)引入vu......
  • Vue package-lock.json的作用
    package-lock.json的作用 "node_modules/@aashutoshrathi/word-wrap":{"version":"1.2.6","resolved":"https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",&......