0

0

Vue中使用vue-router的妙用详解

王林

王林

发布时间:2023-06-09 16:08:11

|

1492人浏览过

|

来源于php中文网

原创

vue是当前最热门的前端框架之一,它不仅简洁易用,而且具有强大的扩展性,其中一个值得关注的插件就是vue-router。vue-router是vue官方路由插件,它可以更好地控制vue应用中的路由导航,使路由与组件之间的关系更加清晰,提升了用户的交互体验。本文将详细解读vue-router的使用方法及妙用。

一、安装和使用

在使用vue-router之前,需要先安装它。可以使用npm包管理器来安装vue-router插件。安装命令如下:

npm install vue-router

安装完成之后,在main.js文件中引入并使用vue-router:

import VueRouter from 'vue-router'
import routes from './router'

const router = new VueRouter({
      routes
})

new Vue({
      el: '#app',
      router,
      render: h => h(App)
})

其中,routes参数指定路由配置,可以根据项目需要进行修改。然后在Vue实例化对象中传入router参数,启用路由功能。

立即学习前端免费学习笔记(深入)”;

二、基础配置

路由配置包含路由表和路由组件两个部分。路由表主要用于配置路由路径和相应的组件,路由组件是对应路由路径的组件视图。

在src目录下创建router.js文件,定义路由表和组件。如下:

import Home from './views/Home.vue'
import About from './views/About.vue'

export default [
    {
        path: '/',
        name: 'home',
        component: Home
    },
    {
        path: '/about',
        name: 'about',
        component: About
    }
]

然后在main.js中引入路由配置,并传入VueRouter实例中。其中,路由路径使用path属性进行配置,component属性指定对应的路由组件。

三、参数传递

Vue-router还支持传递参数,可以通过$route对象获取到传递的参数。

  1. 路径传参

路径传参是指将参数放在路由路径的一部分,例如:

{
  path: '/user/:userId',
  name: 'user',
  component: User
}

当用户访问/user/1时,路由会将1作为参数userId传递给User组件。

  1. 查询参数传参

查询参数传参是指将参数以键值对的形式放在路由路径后,以问号?分隔,连续的键值对用&连接,例如:

{
  path: '/user',
  name: 'user',
  component: User
}

当用户访问/user?id=1&name=john时,路由会将{id: 1, name: 'john'}作为查询参数传递给User组件。

四、重定向和嵌套路由

mallcloud商城
mallcloud商城

mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提

下载
  1. 重定向

重定向是指将用户在浏览器中访问某个路径时,自动跳转到另一个路径。如下代码实现了路径/about自动跳转到路径/home的功能:

import Home from './views/Home.vue'
import About from './views/About.vue'

export default [
  {
    path: '/',
    redirect: '/home'
  },
  {
    path: '/home',
    name: 'home',
    component: Home
  },
  {
    path: '/about',
    redirect: '/home'
  }
]
  1. 嵌套路由

嵌套路由是指在父组件中使用子组件的路由。例如,在头部和底部为固定结构的页面中,需要嵌套“内容”组件,三层结构看起来是这样的:

header
 / 
L   R
    |
content
    |
footer

嵌套路由需要在父组件内部使用标签来占位,并在父组件的路由表内部定义子路由表。例如:

const home = {
  template: `
    

Home

` } const about = { template: '
About
' } const contact = { template: '
Contact
' } const router = new VueRouter({ routes: [ { path: '/', name: 'home', component: home, children: [ { path: 'about', name: 'about', component: about }, { path: 'contact', name: 'contact', component: contact } ] } ] })

在home组件中使用了标签作为子组件“about”和“content”的占位符。在路由表中,父组件“home”配置的子路由表中包含了“about”和“content”两个子路由路径。

五、路由守卫

  1. 全局守卫

全局守卫会在路由切换前触发,其中beforeEach()为全局前置守卫,可以进行权限验证、登陆验证等操作。

router.beforeEach((to, from, next) => {
  // 验证用户是否登陆 
  if(to.path === '/login') {
    next();
  } else {
    let token = localStorage.getItem('token');

    if(token === null || token === '') {
      next('/login');
    } else {
      next();
    }
  }
})

全局后置守卫用于路由切换后触发,用于处理页面加载的进度条等操作。

  1. 路由独享守卫

路由独享守卫用于针对某个路由做出特定的处理,在路由配置中添加beforeEnter属性定义即可。

const router = new VueRouter({
  routes: [
    {
      path: '/admin',
      name: 'admin',
      component: admin,
      beforeEnter: (to, from, next) => {
        // 验证是否为管理员账户
        let token = localStorage.getItem('token');
        if(token === 'admin') {
          next();
        } else {
          next('/');
        }
      }
    }
  ]
})
  1. 组件内守卫

组件内守卫主要用于对当前组件进行处理。包括:beforeRouteEnter,beforeRouteUpdate和beforeRouteLeave三个守卫函数。

beforeRouteEnter函数在组件进入之前触发,在该函数中无法直接访问组件实例,但可以通过next回调函数传递组件实例进行处理。

export default {
  data () {
    return {
      user: {}
    }
  },
  beforeRouteEnter (to, from, next) {
    axios.get(`/api/user/${to.params.id}`).then(response => {
      next(vm => vm.setUser(response.data.user))
    })
  },
  methods: {
    setUser (user) {
      this.user = user
    }
  }
}

beforeRouteUpdate函数由于组件之间的路由跳转不会重新创建实例,因此需要使用beforeRouteUpdate函数进行处理。

export default {
  watch: {
    '$route' (to, from) {
      // 对路由变化作出响应...
    }
  },
  beforeRouteUpdate (to, from, next) {
    // react to route changes...
    // don't forget to call next()
  }
}

beforeRouteLeave函数在组件即将被离开时触发,用于处理未保存的表单数据等操作。

export default {
  beforeRouteLeave (to, from, next) {
    // 如果表单已保存或者页面没有修改,直接离开该页面
    if (this.saved || window.confirm('尚未保存,确定要离开吗?')) {
      next()
    } else {
      next(false)
    }
  }
}

六、总结

使用vue-router插件可以为Vue应用中的路由导航提供强大的控制能力,从而提升用户的交互体验。本文介绍了vue-router的基础配置、参数传递、重定向和嵌套路由及路由守卫等功能,可以帮助开发者更好地使用vue-router插件。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

254

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5270

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

477

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.04

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

217

2023.09.14

js截取字符串的方法介绍
js截取字符串的方法介绍

JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

218

2023.09.21

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 6.5万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号