返回

父路由改变时vue-router子路由不刷新的解决办法

前端

在Vue.js中使用vue-router进行路由管理时,在多层嵌套路由的情况下,可能会遇到父路由改变时子路由不刷新的问题。这是因为在默认情况下,vue-router使用的是"hash"模式,而"hash"模式是通过URL中的哈希值来标识不同的路由。当父路由改变时,URL中的哈希值不会改变,因此子路由不会被重新加载。

解决方案

为了解决这个问题,我们可以使用vue-router提供的"history"模式。在"history"模式下,URL中的哈希值不会改变,而是使用浏览器的历史记录来标识不同的路由。当父路由改变时,浏览器的历史记录会被更新,因此子路由会被重新加载。

1. 在main.js中修改router配置

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    component: Home,
    children: [
      {
        path: 'user',
        component: User
      },
      {
        path: 'product',
        component: Product
      }
    ]
  }
]

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

export default router

2. 配置服务器端进行重定向

如果您的后端是基于Node.js的,那么您可以在Express.js中配置重定向。

const express = require('express');
const app = express();

//将所有的请求重定向到index.html
app.use('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'index.html'));
});

// 启动服务器
app.listen(3000);

3. 修改组件的keep-alive属性

<template>
  <keep-alive>
    <router-view />
  </keep-alive>
</template>

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

通过以上三个步骤,即可解决vue-router在多层嵌套路由的情况下父路由改变时子路由不刷新的问题。