权限刷新后样式没更新,是缓存问题吗?
我在做前端权限控制,用户切换角色后动态加载菜单和按钮权限,但发现有些按钮的显示状态没变。强制刷新页面才生效,是不是哪里缓存了?
我试过在权限变更后调用 Vue 的 $forceUpdate(),也清过组件的 keep-alive 缓存,但还是不行。下面是控制按钮显隐的 CSS:
.btn-hidden {
display: none !important;
}
.btn-visible {
display: inline-block;
}
类名确实变了,但样式没更新,控制台看元素上 class 已经切换了,就是视觉上没反应,这到底啥原因?
你说class已经切换了,但样式没变,关键就在你的CSS写法。看你的代码,
.btn-hidden用了!important,但.btn-visible没加。如果切换的时候两个class同时存在过一瞬间,或者你的逻辑是先加新class再删旧class,那display: none !important会一直压着display: inline-block。你检查一下切换逻辑,是不是这么写的:
应该改成先删后加:
或者更直接,用toggle或者替换的方式,别让两个class有机会共存。
还有个方案,给
.btn-visible也加上!important,这样两个优先级一致,后加载的会覆盖前面的。不过说实话,滥用!important后期维护是个坑,能不用就别用。另外提一嘴,权限控制这种东西,从架构上讲最好在后端层面也做一道拦截,前端隐藏按钮只是用户体验,真要防还得靠接口鉴权。不然懂点技术的人直接调接口,权限形同虚设。