Vue-Router解析:揭秘路由的组成与使用技巧

目录

一、简介

Vue-Router路由:打造无缝导航体验

什么是 Vue-Router?

二、路由的组成

1.VueRouter:路由器,根据路由请求在路由视图中动态渲染对应的视图组件。

2.:路由链接组件,用来生成超链接标签的组件,浏览器会解析成

3.:路由视图组件,用来确定具体视图组件的位置

4.三者如何协作执行一个流程?

三、Vue-Router路由在项目中如何使用?

1.安装 Vue-Router

2. 定义路由和组件

3. 在 Vue 实例中使用路由

4. 在模板中使用  和 

5.标签式路由方法

四、重难点和解决办法

1. 404 页面处理

2. 动态路由

3. 路由守卫

4. 路由模式


一、简介

Vue-Router路由:打造无缝导航体验

在现代前端开发中,Vue.js 凭借其简洁和高效的特性,成为许多开发者的首选框架。然而,一个复杂的应用往往需要多个页面和组件之间的灵活切换,这时候就需要引入 Vue-Router。本文将生动形象地介绍 Vue-Router 的定义、使用方法以及遇到的重难点和解决办法。

什么是 Vue-Router?

想象一下,在生活中,设备通过 IP 地址互相通信,而一个复杂的 Vue 应用也需要一种机制来管理各个组件之间的访问路径。Vue-Router 正是这样一种机制,它建立了路径和组件之间的映射关系,就像生活中的设备和 IP 的映射关系一样。通过 Vue-Router,我们可以实现单页面应用(SPA),即在同一个页面内,根据不同的 URL 展示不同的内容,从而提升用户体验和页面加载效率。

其实Vue就属于单页面应用,所谓的路由,就是根据浏览器路径不同,用不同的视图组件替换这个页面内容,即展示不同的视图组件。什么意思呢?在整个Vue应用当中,实际上只有一个页面,浏览器中的多个页面其实是假象,而所谓的页面切换,其实切换的是单页面当中不同的视图组件。就类似于黑板只有一块而上不同的课要写不同的内容是一样的,而替换视图组件的过程就是通过路由完成的。

二、路由的组成

1.VueRouter:路由器,根据路由请求在路由视图中动态渲染对应的视图组件。

什么意思呢?那我们具体来思考一个问题:其实视图组件很多,怎样判断它具体需要渲染哪一个视图组件呢?

其实在路由器中会维护一个路由表,而路由表实际上就是一个映射关系,而映射关系描述的就是某一个路径,比如说/pages/index.vue中的/pages就是一个路径,这个我们可以认为是路由路径。/pages对应的就是index.vue这个视图组件,而路由表的功能就是维护一系列的这样的路由关系。所以简单来说就是用来渲染视图组件的。

所以你其实乐意将路由表理解为城市中的交通指示牌,为网络数据包指明方向。它记录了目的地与路径的对应关系,每当数据包来临,路由表便迅速查阅,为其找到最佳通行路线。无论是穿梭于互联网的广阔天地,还是局限于局域网的小范围,路由表都是不可或缺的导航者。

2.<router-link>:路由链接组件,用来生成超链接标签的组件,浏览器会解析成<a>

 <router-link>就像是Vue应用中的魔法传送门,它轻轻一点,就能在不刷新页面的情况下,将组件安全、迅速地传送到指定的路由页面。下面简单介绍一下它具体的应用:

在以上代码中,使用 <router-link>来将“首页”和“关于我们”转换成超链接,当在页面中点击“首页”或“关于我们”时,就换切换至相应的组件。

3.<router-view>:路由视图组件,用来确定具体视图组件的位置

<router-view>的功能是用来确定具体视图组件的位置,即展示与路由路径相匹配的视图组件,你可以把它想象成一个页面当中的占位符,通过上图其实可以发现,在点击了由<router-link>创建的超链接以后,<router-view>会渲染匹配到相应的组件,即 “跳转” 到对应的页面。此外你还可以与Vue的<transition>组件结合使用,可以为路由切换添加过渡动画。

4.三者如何协作执行一个流程?

具体的执行逻辑就是:点击<router-link>超链接,就发起了路由请求 → 路由器处理:根据路由路径不同,去渲染对应的视图组件 → 更新视图:将视图更新到<router-view>视图组件的具体位置中。如图所示:

三、Vue-Router路由在项目中如何使用?

1.安装 Vue-Router

首先,你需要通过 npm 或 yarn 安装 Vue-Router:

npm install vue-router --save

2. 定义路由和组件

接下来,定义你的路由和组件。假设你有两个页面:Home 和 About。你需要先创建这两个组件(Home.vue 和 About.vue),然后在router.js 文件中定义路由规则。

// router.js  
import Vue from 'vue';  
import Router from 'vue-router';  
import Home from './views/Home.vue';  
import About from './views/About.vue';  
  
Vue.use(Router);  
  
export default new Router({  
  routes: [  
    { path: '/', name: 'home', component: Home },  
    { path: '/about', name: 'about', component: About }  
  ]  
});

3. 在 Vue 实例中使用路由

在 main.js 文件中,你需要将路由添加到 Vue 实例中:

// main.js  
import Vue from 'vue';  
import App from './App.vue';  
import router from './router';  
  
new Vue({  
  router,  
  render: h => h(App)  
}).$mount('#app');

4. 在模板中使用 <router-link> 和 <router-view>

现在,你可以在模板中使用 <router-link> 来创建导航链接,<router-view> 来展示当前路由对应的组件。

<!-- App.vue -->  
<template>  
  <div id="app">  
    <nav>  
      <router-link to="/">Home</router-link>  
      <router-link to="/about">About</router-link>  
    </nav>  
    <router-view></router-view>  
  </div>  
</template>

其实路由的使用分为标签式和编程式,上面这种在模板中使用<router-link>的方法就是标签式使用路由 “跳转页面” 的方法,还有一种标签式的路由方法。

5.标签式路由方法

// 使用Vue Router的实例方法$router.push进行编程式导航  
// 此方法接受一个位置对象或字符串作为参数,用于指定要导航到的新位置  

this.$router.push('/about');

在这个例子中,我们传递了一个字符串'/about'作为参数 ,这意味着应用将尝试导航到路径为'/about'的路由,如果存在与'/about'匹配的路由,则Vue Router将渲染对应的组件到<router-view>中, 并且不会重新加载整个页面,只更新视图部分,实现页面的无缝切换  。

四、重难点和解决办法

介绍了路由的使用之后,首先需要大家一起想一个问题,如果请求的路径不存在会出现什么问题?该怎么处理?这就是第一个重难点:404页面的处理

1. 404 页面处理

当用户访问一个不存在的路由时,可以成功发出路由请求,但是找不到相应的视图去渲染,所以会显示一个空 “页面”,所以我们可以给一个404的页面进行展示,说明请求的也页面不存在。

解决办法

  • 在路由表中添加一个通配符路由 { path: '*', component: NotFound },来捕获所有未匹配的路由。
  • 创建 NotFound.vue 组件,展示 404 页面内容。
{  
  path: '/about',  
  name: 'about',  
  // route level code-splitting  
  // this generates a separate chunk (about.[hash].js) for this route,  
  // which is lazy-loaded when the route is visited.  
  component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
},
{  
  path: '/404',  
  //跳转到指定的404页面,'../views/404View.vue'为页面路径
  component: () => import('../views/404View.vue'),  
},  
{
  path: '*',
  //当检索不到所指定的路径时,执行跳转到404页面
  redirect: '/404'
}
const router = new VueRouter({  
  routes  
});  
export default router;

2. 动态路由

在实际应用中,用户角色和权限不同,需要展示不同的导航菜单。这时,你可以使用动态路由。Vue-Router 提供了 router.addRoutes 方法,可以在运行时动态添加路由规则。

解决办法

  • 根据用户角色,从后端获取路由列表。
  • 使用 router.addRoutes 方法,将获取到的路由列表添加到 Router 实例中。

3. 路由守卫

路由守卫用于在路由切换前或切换后进行某些操作,比如检查用户是否登录、加载数据等。Vue-Router 提供了全局守卫、路由守卫和组件守卫。

解决办法

  • 使用全局前置守卫 router.beforeEach,在页面加载前检查用户登录状态。
  • 使用路由守卫 beforeEnter,在特定路由前执行逻辑。
  • 使用组件守卫 beforeRouteEnterbeforeRouteUpdate 和 beforeRouteLeave,在组件内部控制路由切换。

4. 路由模式

Vue-Router 提供了两种模式:hash 模式和 history 模式。hash 模式会在 URL 中添加一个 # 符号,而 history 模式则不会。

解决办法

  • 如果你希望 URL 更加美观,可以使用 history 模式,但需要注意服务器配置,因为这种模式需要服务器支持。

如果文章对您有帮助

还请您点赞支持,感谢您的阅读

欢迎在评论区指正或提出您宝贵的看法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值