vue-router4刷新页面是空白

vue-router 使用动态路由,刷新页面后页面是空白

版本

请添加图片描述

添加动态路由

export const actions: ActionTree<permission_state.permission_info, vuex.RootStore> & Actions = {
    async [PermissionActionsType.GET_PERMISSIONS](
        {commit}: AugmentedActionContext,
    ) {
        await api.get_permission({}).then(async (res: any) => {
            const routers = filter_router(res.permissions)
            for (const rou of routers) {
                if (!router.hasRoute((rou.name as RouteRecordName))) router.addRoute((rou.name as RouteRecordName), rou)
            }

            router['routers'] = routers
            commit(PERMISSION_TYPES.SET_ROUTERS, routers)
        })
    }
}

前置守卫

router.beforeEach(async (to: RouteLocationNormalized, _: RouteLocationNormalized, next: NavigationGuardNext) => {
    NProgress.start()
    const store = useStore()
    if (store.state.user.token) {
        await store.dispatch(PermissionActionsType.GET_PERMISSIONS, undefined)
        if (to.path === '/login') {
            next({path: '/index'})
        } else {
            await next()
        }
        NProgress.done()
    } else {
        // next()
        // NProgress.done()
        // // Has no token
        if (whiteList.indexOf(to.path) !== -1) {
            // In the free login whitelist, go directly
            next()
            NProgress.done()
        } else {
            // Other pages that do not have permission to access are redirected to the login page.
            next(`/login?redirect=${to.path}`)
            NProgress.done()
        }
    }
})

出现原因

请添加图片描述
因为我们刷新页面的时候,还是在之前页面,就不会触发新的导航,所以就不会显示。

解决方法

不使用next使用router.push()方法

router.beforeEach(async (to: RouteLocationNormalized, _: RouteLocationNormalized, next: NavigationGuardNext) => {
    NProgress.start()
    const store = useStore()
    if (store.state.user.token) {
        await store.dispatch(PermissionActionsType.GET_PERMISSIONS, undefined)
        if (to.path === '/login') {
            next({path: '/index'})
        } else {
            // 判断是不是当前页面,如果是当前页面就使用push方法,就OK了。
            if (!to.meta.title) await router.push({path: to.path})
            await next()
        }
        NProgress.done()
    } else {
        // next()
        // NProgress.done()
        // // Has no token
        if (whiteList.indexOf(to.path) !== -1) {
            // In the free login whitelist, go directly
            next()
            NProgress.done()
        } else {
            // Other pages that do not have permission to access are redirected to the login page.
            next(`/login?redirect=${to.path}`)
            NProgress.done()
        }
    }
})

在Vue 3中,使用Vue Router进行路由拆分可以帮助你更好地组织和管理你的路由配置。以下是一些步骤来实现路由拆分: 1. 安装Vue Router:首先,确保你的项目中已经安装了Vue Router。可以通过以下命令进行安装: ``` npm install vue-router@next ``` 2. 创建路由模块:创建一个新的模块来定义和配置你的路由。可以创建一个名为`router.js`的文件,并在其中导入Vue和Vue Router: ```javascript import { createRouter, createWebHistory } from 'vue-router'; const routes = [ // 定义你的路由配置 ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` 3. 定义路由配置:在路由模块中,通过`routes`数组来定义你的路由配置。每个路由对象应该包含一个`path`属性和一个`component`属性,分别指定路由的路径和对应的组件。 ```javascript import Home from './components/Home.vue'; import About from './components/About.vue'; const routes = [ { path: '/', component: Home, }, { path: '/about', component: About, }, // 更多路由配置... ]; ``` 4. 在主应用程序中使用路由:在你的主应用程序中,导入并使用创建的路由实例。你可以在`main.js`文件中完成这个步骤: ```javascript import { createApp } from 'vue'; import App from './App.vue'; import router from './router'; const app = createApp(App); app.use(router); app.mount('#app'); ``` 现在,你已经成功拆分了你的路由配置。你可以在每个组件中使用`<router-link>`和`<router-view>`来进行导航和渲染路由组件。 注意:以上只是一个简单的示例,你可以根据你的项目需求进行更复杂的路由配置和组织方式。不过,以上步骤应该可以帮助你开始使用Vue Router进行路由拆分。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值