当前位置: 面试刷题>> Vue Router 的 $route 和 $router 对象有什么区别?


在Vue.js框架中,Vue Router是一个核心的库,用于构建单页面应用(SPA)的路由系统。在处理路由时,经常会遇到$route$router这两个对象,它们各自扮演着不同的角色,对于理解Vue Router的工作原理至关重要。作为一名资深开发者,在面试中深入探讨这两个对象的区别,不仅能够展示你对Vue Router的深入理解,还能体现你的专业素养。

$router 对象

$router是Vue Router的实例,它包含了整个路由的配置信息,以及如pushreplacegobackforward等导航方法。它就像是Vue Router的全局管理者,控制着路由的跳转、回退等逻辑。你可以通过它来定义路由的映射规则、全局守卫(如beforeEach、afterEach钩子)等。

示例代码

// 在Vue组件外部,可能是main.js或router/index.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);

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

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

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

// 在组件内部使用$router进行路由跳转
this.$router.push({ name: 'About' });

$route 对象

$route则代表当前激活的路由信息对象,包含了当前URL解析得到的信息,以及URL匹配到的路由记录(route records)。它是一个路由信息对象,包含如pathparamsqueryhashfullPathmatchedname等路由信息字段。在组件内部,我们主要通过$route来访问当前路由的状态和信息,但它并不提供跳转功能。

示例代码

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

<script>
export default {
  name: 'RouteInfo',
  // 注意:通常不会在这里直接使用$router进行跳转,
  // 但可以通过方法中的this.$router来实现跳转
  mounted() {
    // 演示目的,实际应用中不建议在此处直接跳转
    // console.log(this.$route); // 查看当前路由对象
  }
}
</script>

实际应用中的区分

在实际应用中,我们几乎总是在组件内部通过$route来访问当前路由的信息,比如获取URL中的查询参数或动态片段参数。而$router则更多地用于进行路由的跳转控制,无论是在组件内部还是外部,都可以通过$router实例的导航方法来实现。

理解$route$router的区别,有助于我们更精准地控制Vue应用中的路由行为,从而编写出更高效、可维护的代码。同时,这也是Vue Router基础知识中的一个重要考点,在面试中能够清晰阐述两者的区别,无疑会给你的表现加分。

希望以上解答能帮助你更好地理解Vue Router中的$route$router对象,并在面试中展现出你的专业素养。记住,在深入学习Vue及其生态系统时,实践和探索总是最佳的学习方式。而码小课作为你的学习资源之一,将为你提供更多高质量的内容和实践机会。

推荐面试题