# vue-router(路由)

# 简介

Vue Router 是 Vue 官方的客户端路由解决方案。

客户端路由的作用是在单页应用 (SPA) 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时,URL 会随之更新,但页面不需要从服务器重新加载。

Vue Router 基于 Vue 的组件系统构建,你可以通过配置路由来告诉 Vue Router 为每个 URL 路径显示哪些组件。

# 集成到 JsView

JsView 默认已集成vue-router,采用 npm ci 的方式即可安装依赖包到工程中。 需要注意的是,目前 jsview-vue 工程中 vuejs 版本和可用的 vue-router 版本的对应关系如下。

jsview-vue vuejs版本 pinia版本
^4.1.6 3.2.45 2.0.35

# 现存问题

  1. 同时存在多个 router-view 并使用 keep-alive 导致组件被多次创建的解决方法。
  • 多个vue-router同时使用默认名字时,当直接跳转到嵌套(或并列)的其他子router-view时,当前组件的onMounted会被多调用一次。 如图:SubPageA在进入SubPageB再跳回后,多生成了一个inactive的SubPageA并mount。
  • 解决方法: 确保全局只有一个默认的router-view,每个子组件通过命名router-view确定要放入哪个router-view中。
router.js

...
const routes = [{ 
  path: '/subpage-a', 
  component: () => import("./view/SubPageA.vue"),
  children: [{
    path: 'subpage-aa',
    name: 'SubPageAA',
    components: { // 注意 components 和 component 的区别。
      'router-a': () => import("./view/SubPageAA.vue"),
    },
  }],
}];
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SubPageA.vue

...
<template>
  <router-view name="router-a" v-slot="{ Component }">
    <keep-alive>
      <component :is="Component" />
    </keep-alive>
  </router-view>
</template>
...
1
2
3
4
5
6
7
8
9
10
11

参照: https://router.vuejs.org/zh/api/interfaces/RouteRecordNormalized.html#Properties-components (opens new window)

Last Updated: 5/20/2025, 6:13:05 AM