当前位置: 面试刷题>> Vue Router 中 route 和 router 有哪些区别?


在Vue开发中,Vue Router作为Vue.js的官方路由管理器,是构建单页面应用(SPA)不可或缺的一部分。对于初学者而言,routerroute这两个概念可能会产生混淆,但实际上它们在Vue Router中扮演着截然不同的角色。作为一位高级程序员,理解这些差异对于编写高效、可维护的代码至关重要。

Vue Router中的router

在Vue Router中,router对象是整个路由的实例,它包含了所有的路由信息以及路由跳转的方法。你可以通过Vue实例的$router属性来访问它。router对象主要负责构建路由映射表、处理路由的跳转、以及管理路由的生命周期等。

主要功能

  • 路由映射:定义应用中的路由,将URL路径映射到对应的组件上。
  • 路由跳转:提供编程式导航的API,如router.push(), router.replace(), router.go()等,用于实现页面间的跳转。
  • 路由守卫:通过全局守卫、路由独享守卫、组件内守卫等机制,在路由跳转前后执行特定逻辑,如权限校验、页面标题设置等。

示例代码

// 创建router实例
import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './views/Home.vue';
import About from './views/About.vue';

Vue.use(VueRouter);

const routes = [
  { path: '/', name: 'home', component: Home },
  { path: '/about', name: 'about', component: About }
];

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
});

// 使用router实例
export default router;

// 在Vue实例中使用
new Vue({
  router,
  render: h => h(App)
}).$mount('#app');

// 编程式导航
this.$router.push('/about');

Vue Router中的route

router不同,route对象表示当前激活的路由状态信息对象,包含了当前URL解析得到的信息,以及URL匹配到的路由记录(route records)。你可以通过Vue组件内的this.$route来访问它。route对象主要用于获取当前路由的信息,如路径、查询参数、路由参数等。

主要属性

  • $route.path:字符串,对应当前路由的路径,总是解析为绝对路径,如 "/foo/user123"。
  • $route.params:一个包含动态片段和全星片段的键值对的对象。
  • $route.query:一个包含路由中查询参数的对象。例如,对于路径 "/foo?user=1",则有 $route.query.user == 1。
  • $route.hash:当前路由的 hash 值 (带 #) ,如果没有 hash 值,则为空字符串。
  • $route.fullPath:完成解析后的 URL,包含查询参数和 hash 的完整路径。

示例代码

<template>
  <div>
    <h1>当前路由信息</h1>
    <p>路径: {{ $route.path }}</p>
    <p>查询参数: {{ $route.query }}</p>
    <p>路由参数: {{ $route.params }}</p>
  </div>
</template>

<script>
export default {
  name: 'RouteInfo'
}
</script>

总结

在Vue Router中,routerroute虽一字之差,但职责分明。router是Vue Router的实例,负责整个路由系统的配置和导航功能;而route则代表了当前激活的路由状态信息,用于在组件中获取当前路由的详细信息。深入理解这两个概念,对于掌握Vue Router以及构建高效、可维护的单页面应用至关重要。在开发过程中,合理利用Vue Router提供的API和路由守卫等机制,可以大大提升开发效率和应用的用户体验。希望这个回答能够帮助你更好地理解和应用Vue Router。

推荐面试题