您的当前位置:首页>全部文章>文章详情

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

CrazyPanda发表于:2024-04-29 23:57:02浏览:292次TAG:

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组件。

四、重定向和嵌套路由

  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: `
    <div>
      <h2>Home</h2>
      <router-view></router-view>
    </div>
  `
}
 
const about = {
  template: '<div>About</div>'
}
 
const contact = {
  template: '<div>Contact</div>'
}
 
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插件。


猜你喜欢

【Vue】Vue定义全局变量的方法
在Vue项目中我们需要使用许多的变量来维护数据的流向和状态,这些变量可以是本地变量、组件变量、父子组件变量等,但这些变量都是有局限性的。在一些场景中,可能需要在多个组件中共享某个变量,此时全局变量就派上了用场。定义全局变量的方法1. 使用Vue.prototype定义全局变量通过在 vue 的原型上定义属性,可以在所有组件中访问该属性。在main.js定义全局变量// main.jsVue.prototype.baseUrl = &quot;https://www.example.com/api
发表于:2024-04-22 浏览:352 TAG:
【Vue】Antd Pro Vue的使用(十) —— a-form表单赋值
在Ant Design Pro Vue中,为表单赋值通常涉及到两个方面:一是使用v-model进行双向绑定,二是直接通过this.form.setFieldsValue()方法设置表单字段的值。以下是一个简单的例子,展示如何为Ant Design Pro Vue中的表单赋值:首先,确保你已经在组件中引入了a-form-model和相关的表单字段组件比如a-form-model-item和a-input。在data函数中定义一个form对象,它包含了你想要绑定的表单字段。使用v-model指令将输
发表于:2024-05-10 浏览:301 TAG:
【Vue】Vue 单文件组件 (SFC) 规范
简介.vue 文件是一个自定义的文件类型,用类 HTML 语法描述一个 Vue 组件。每个 .vue 文件包含三种类型的顶级语言块 &lt;template&gt;、&lt;script&gt; 和 &lt;style&gt;,还允许添加可选的自定义块:
发表于:2024-03-29 浏览:272 TAG:
【Vue】前端框架 Vue3框架 使用总结(一) Vue框架的基础使用
目录一、Vue3框架基础1、创建项目2、项目结构3、Vue基础语法4、组件之间通信5、组合式api二、VueRouter的基础使用1、安装2、使用案例3、完整案例步骤4、调优-路由懒加载三、Vuex数据管理1、实现案例&nbsp;2、更改store状态,同步操作3、store中的计算属性4、redux里的异步操作Action5、模块化管理四、网络请求Vue3官方文档:Vue.js - 渐进式 JavaScript 框架 | Vue.js基础部分见官方文档一、Vue3框架基础1、创建项目安装yar
发表于:2023-12-05 浏览:782 TAG:
【Vue】Antd Pro Vue的使用(四)—— 打包发布到站点二级目录,生产环境请求接口配置
如题,Antd Pro Vue开发完成后,要打包发布到站点指定二级目录下,我这里服务端配置的是tp,在站点public文件夹新建一个system文件夹,前端打包后要放到个文件夹里面,需要配置2步1. 在根目录vue.config.js文件夹中配置publicPath&nbsp;publicPath:&nbsp;&#39;/system/&#39;,2. 在/src/router/index.js文件中,增加base配置,配置内容与publicPath保持一致router:&nbsp;{ &amp;nbs
发表于:2024-04-27 浏览:332 TAG:
【Vue】vue使用后端提供的接口
在 vue 中使用后端接口可通过以下步骤实现:安装 axios 库并导入。使用 axios 对象创建 http 请求,如 get 或 post。使用 data 选项传递数据。处理响应,使用 data 属性访问后端返回的数据。使用 vuex 管理从后端获取的数据,通过组件访问。在 Vue 中使用后端接口在 Vue.js 应用中使用后端提供的接口可以让你与服务器通信,获取和更新数据。本文将介绍如何在 Vue 中使用后端接口。1. 安装 Axios首先,你需要安装 Axios 库,这是一个用于发起 H
发表于:2024-04-18 浏览:292 TAG:
【Vue】Vue常用框架介绍
现在的应用基本都是前后端分离,在国内,Vue相对来说更受欢迎一些,我们很多后端系统的前端都是Vue来开发的。那么Vue UI框架就显得尤为重要。Vue UI框架提供了一套丰富的用户界面组件及完整的前端UI解决方案,如按钮、表单、导航、布局等,使得开发者可以专注于业务逻辑开发,而不用从零构建这些常用的界面元素,帮助开发者更快速地构建高质量的用户界面。那么,都有哪些开源的UI框架呢?Element UIElement UI是一套为开发者、设计师和产品经理准备的基于Vue 2.0的组件库,提供了丰富的
发表于:2024-04-22 浏览:431 TAG:
【Vue】Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(下)
文章目录📋前情回顾&amp;前言🎯关于 el-table1️⃣获取每行对应的内容数据2️⃣行内数据判断处理(过滤)3️⃣对表格内容的索引🧩项目中延申使用🎯关于 el-pagination1️⃣显示总条数与分页展示2️⃣跳转页和页码样式3️⃣设置为中文🧩项目中延申使用📝最后📋前情回顾&amp;前言上一篇文章(Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深
发表于:2023-12-10 浏览:235 TAG:
【Vue】Vue3项目filter.js组件封装
1、element-plus(el-table)修改table的行样式export&nbsp;function&nbsp;elTableRowClassName({&nbsp;row,&nbsp;rowIndex&nbsp;})&nbsp;{ &nbsp;&nbsp;if&nbsp;(rowIndex&nbsp;%&nbsp;2&nbsp;!=&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#39;default-row&#39; &amp;nb
发表于:2023-12-15 浏览:319 TAG:
【Vue】vue通过class获取dom
其实就是操作 html 中的标签的一些能力  我们可以操作哪些内容  获取一个元素  移除一个元素  创建一个元素  向页面里面添加一个元素  给元素绑定一些事件  获取元素的属性给元素添加一些 css 样式  ...  DOM 的核心对象就是 docuemnt 对象  document 对象是浏览器内置的一个对象,里面存储着专门用来操作元素的各种方法  DOM: 页面中的标签,我们通过 js 获取到以后,就把这个对象叫做 DOM 对象获取一个元素通过 js 代码来获取页面中的标签获取到以后我们
发表于:2024-05-12 浏览:289 TAG: