当前位置: 首页 > 知识库问答 >
问题:

如何防止Vue.js中的子路由在页面刷新时丢失样式

孟韬
2023-03-14

我的网站路由工作正常,但当我点击刷新按钮时,问题就出现了。

在基本路线上,例如http://localhost:8080/employers页面或组件样式保持不变,但当我刷新子路由时,例如http://localhost:8080/employers/google此组件的所有样式都将丢失。

对于如何解决此问题的任何帮助,我们将不胜感激

import Vue from 'vue'
import Router from 'vue-router' 
// import store from './store.js'

Vue.use(Router)

const router = new Router({
    mode: 'history',
    base: process.env.BASE_URL,
    routes: [        
        {
            path: '/',
            component: () => import('./views/Home.vue'),
            children: [
                {
                    path: "",
                    component: () => import("./views/HomePage.vue"),
                },
                {
                    path: '/jobs',
                    name: 'jobs',
                    component: () => import('./views/JobListings.vue')
                },
                {
                    path: '/job/:id',
                    name: 'job',
                    component: () => import('./views/JobDetails.vue')
                },
                {
                    path: '/login',
                    name: 'login',
                    component: () => import('./views/Login.vue')
                },
                {
                    path: '/register',
                    name: 'register',
                    component: () => import('./views/Register.vue')
                },
                {
                    path: '/forgotpassword',
                    name: 'forgotpassword',
                    component: () => import('./views/ForgotPassword.vue')
                },
                {
                    path: '/verify',
                    name: 'verify',
                    component: () => import('./views/Verify.vue')
                }, 
            ],
        },


        {
            path: '/employer',
            component: () => import('@/views/Employers.vue'),
            children: [
                {
                    path: '', 
                    component: () => import('./views/Employers/Profile.vue')                    
                },
                {
                    path: 'profile', 
                    component: () => import('./views/Employers/Profile.vue')
                },
                {
                    path: 'post',
                    component: () => import('./views/Employers/PostJob.vue')
                },
                {
                    path: 'listings', 
                    component: () => import('./views/Employers/Listings.vue')
                }, 
                {
                    path: 'settings', 
                    component: () => import('./views/Employers/Listings.vue')
                },
                {
                    path: 'editresume', 
                    component: () => import('./views/Employers/Listings.vue')
                },
                {
                    path: 'closeaccount', 
                    component: () => import('./views/Employers/Listings.vue')
                },
            ]
        },

        // jobseekers route
        {
            path: '/jobseeker', 
            component: () => import('@/views/Jobseekers/Home.vue'),
            children: [
                {
                    path: '', 
                    component: () => import('@/views/Jobseekers/Profile.vue')
                },
                {
                    path: 'resume', 
                    component: () => import('@/views/Jobseekers/Resume.vue')
                },
                {
                    path: 'profile', 
                    component: () => import('@/views/Jobseekers/Profile.vue')
                },
                {
                    path: 'settings', 
                    component: () => import('@/views/Jobseekers/Settings.vue')
                },
                {
                    path: 'applications', 
                    component: () => import('@/views/Jobseekers/Applications.vue')
                },                
                {
                    path: 'close', 
                    component: () => import('@/views/Jobseekers/Close.vue')
                },
            ]
        },

        {
            path: '/jobseeker/:page',
            component: () => import('@/views/Jobseekers/Profile.vue'),
        },

        {
            path: '/search/:region/:keyword',
            component: () => import('./views/JobListings.vue')
        },

        // not found route
        {
            path: '*',
            name: '404',
            component: () => import('./views/404.vue')
        }
    ]
})

export default router

共有3个答案

吕德惠
2023-03-14

我也是同样的问题,但我已经在全局范围内包含了CSS,但它不起作用,最后,我尝试将路由器模式从历史更改为哈希模式。试试我的情况,效果很好。

const router = new Router({
  mode: "hash",
  base: process.env.BASE_URL,
  routes: []
})
宦高岑
2023-03-14

我注意到您正在按需加载组件。

当您从/employers导航到/employers/google路线时,有一些来自/employers路线的CSS样式正在您的/employers/google路线中重复使用。所以当你重新加载http://localhost:8080/employers/googleroute,您无法从/employers获取样式,这会导致您的CSS中断。

我的建议是将通用样式移动到一个特定的文件中,并将其导入到主文件中,如App.vue,这样无论哪个组件被重新加载,它们都将被加载。

洪胤
2023-03-14

问题不在于路由,而在于如何编写css。

>

如果多个组件将共享样式,则可以单独使用css文件。

 类似资料:
  • 在我的项目中,我有两页,第一页用于输入数据,第二页用于向用户显示数据。刷新结果页时,数据将被复制。我试图解决这个问题,但我不熟悉PRG模式。如果用户刷新结果页,我希望防止重复。

  • 当用户成功登录时,它将身份验证状态从null变为true,并且在登陆主页后,当我刷新页面时,它将初始化状态(authstate.js)设置为默认状态值,我希望即使在用户刷新页面后也能保持该状态。我使用的是hooks reducer login.js authstate.js 这是initialstate代码 导出默认的AuthState; authreducer.js这是reducer钩子代码导入

  • 这是一个简单的html页面,我正在使用以下功能更改按钮单击时的样式表(在深色和浅色主题之间切换): 此外,当前主题值保存在浏览器localstorage中,该存储在jquery ready函数外部进行检查,以在加载页面之前(每当用户返回站点时)设置样式表。 问题是(在Chrome和firefox上)当用户切换到深色主题并刷新页面时,样式会消失一秒钟,然后再回来。如果用户切换回light/defau

  • 问题内容: 我有一个简单的表单,可将​​文本提交到SQL表。问题在于,用户提交文本后,他们可以刷新页面,并且无需再次填写表单即可再次提交数据。提交文本后,我可以将用户重定向到另一个页面,但是我希望用户停留在同一页面上。 我记得读过一些有关为每个用户提供唯一的会话ID并将其与另一个值进行比较的信息,这些值解决了我遇到的问题,但我忘记了它在哪里。 问题答案: 使用发布/重定向/获取模式。 在我的网站上

  • 本文向大家介绍JS中利用localStorage防止页面动态添加数据刷新后数据丢失,包括了JS中利用localStorage防止页面动态添加数据刷新后数据丢失的使用技巧和注意事项,需要的朋友参考一下 非常不多说了,直接给大家贴代码了,具体代码如下所示: 以上所述是小编给大家介绍的JS中利用localStorage防止页面动态添加数据刷新后数据丢失,希望对大家有所帮助,如果大家有任何疑问请给我留言,

  • 我保证,我已经谷歌了这一切。 我有一个Spring MVC 4应用程序,它使用Thymeleaf收集表单数据并将其放入数据库。效果很好,只是我希望我的应用程序在用户点击提交按钮后将其留在表单页面上,以便他们可以继续编辑。 每次单击提交时,都会调用控制器并返回视图,从而刷新页面。我想消除刷新,并添加一个警报以确认保存。 所以我开始将表单提交转换为AJAX,并意识到这将违背使用Thymeleaf的目的