面试题3 vue-router

面试题3 vue-router
最新回答
恋初雪

2026-07-20 00:47:50

vue-router相关面试题解答如下:

1. vue-router的几种实例方法以及参数传递
  • 常用实例方法

    router.push(location):导航到新路由,支持路径、对象或命名路由形式。

    // 路径形式this.$router.push('/home')// 对象形式this.$router.push({ path: '/home' })// 命名路由 + 参数this.$router.push({ name: 'user', params: { userId: '123' } })

    router.replace(location):替换当前路由,不留下历史记录。

    router.go(n):前进或后退n步(类似浏览器历史操作)。

  • 参数传递方式

    动态路由参数:通过path: '/user/:id'匹配,组件内通过this.$route.params.id获取。

    查询参数:通过?key=value形式传递,组件内通过this.$route.query.key获取。

    props传递:在路由配置中将params或query映射为组件的props,提高解耦性。

2. vue-router有哪几种导航钩子
  • 全局钩子

    beforeEach:全局前置守卫,每次路由跳转前触发。

    afterEach:全局后置钩子,路由跳转完成后触发。

    beforeResolve:全局解析守卫,在beforeEach之后、组件内守卫之前触发。

  • 路由独享钩子

    beforeEnter:在路由配置中定义,仅对当前路由生效。

    { path: '/user', component: User, beforeEnter: (to, from, next) => { /* ... */ }}
  • 组件内钩子

    beforeRouteEnter:进入组件前触发(无法访问this,可通过next(vm => {})访问)。

    beforeRouteUpdate:路由参数变化时触发(如从/user/1跳转到/user/2)。

    beforeRouteLeave:离开组件时触发(常用于表单未保存提醒)。

3. vue-router的动态路由匹配以及使用
  • 动态路由定义在路径中使用:定义动态字段,例如path: '/user/:id'可匹配/user/123、/user/abc等。

    { path: '/user/:id', component: User}
  • 参数获取

    通过this.$route.params.id获取当前路由的动态参数。

    若需响应参数变化,可在组件内监听$route对象或使用beforeRouteUpdate钩子。

  • 使用场景

    用户详情页(如/user/1、/user/2)。

    分类商品页(如/category/electronics)。

4. vue-router如何定义嵌套路由?
  • 配置方式在父路由的children属性中定义子路由,子路由的path无需以/开头(相对于父路径)。

    const routes = [ { path: '/me', component: Me, children: [ { path: 'collection', component: Collection }, // 实际路径为 /me/collection { path: 'trace', component: Trace } ] }]
  • 嵌套渲染父组件需包含<router-view>作为子路由的出口,子组件内容会在此处渲染。

    <!-- Me.vue --><div> <h1>个人中心</h1> <router-view></router-view> <!-- 子路由内容在此渲染 --></div>
5. <router-link>组件及其属性
  • 基本功能声明式导航组件,替代<a>标签,避免页面刷新。

    <router-link to="/home">首页</router-link>
  • 常用属性

    to:目标路由路径(支持字符串或对象形式)。

    tag:指定渲染为其他标签(如tag="li")。

    replace:使用replace而非push导航。

    active-class:激活状态的自定义类名(默认router-link-active)。

    exact:精确匹配模式(仅当路径完全一致时激活)。

6. vue-router实现路由懒加载(动态加载路由)
  • 懒加载意义减少首屏加载时间,按需加载路由组件,避免打包后文件过大。

  • 实现方式使用动态import()语法或Webpack的require.ensure(推荐前者)。

    // 懒加载路由配置const routes = [ { path: '/home', component: () => import('@/views/Home.vue') // 动态导入 }]
  • 注意事项

    打包后直接运行index.html可能报错,需在webpack.prod.conf.js中配置publicPath: './'。

    懒加载组件需确保路径正确,避免资源404。

7. vue-router路由的两种模式
  • Hash模式(默认)

    路径格式:

    http://example.com/#/home
    。

    特点:依赖URL的hash部分(#后内容),刷新时不会请求服务器。

    适用场景:兼容性要求高或无法配置服务器的项目(如GitHub Pages)。

  • History模式

    路径格式:

    http://example.com/home
    (无#)。

    特点:依赖HTML5 History API,需服务器配置支持(如返回index.html避免404)。

    适用场景:对URL格式要求严格的现代项目(如企业官网)。

图:Hash模式与History模式的URL结构差异

图:Vue Router中启用History模式的配置