当前位置: 代码网 > it编程>前端脚本>Vue.js > 如何处理 Vue3 中隐藏元素刷新闪烁问题

如何处理 Vue3 中隐藏元素刷新闪烁问题

2024年10月27日 Vue.js 我要评论
一、问题说明页面刷新,原本隐藏的元素会一闪而过。效果展示:页面的导航栏通过路由跳转中携带的 meta 参数控制导航栏的 显示/隐藏,但在实践过程中发现,虽然元素隐藏了,但是刷新页面会出现闪烁的问题。项

一、问题说明

页面刷新,原本隐藏的元素会一闪而过。

效果展示:

页面的导航栏通过路由跳转中携带的 meta 参数控制导航栏的 显示/隐藏,但在实践过程中发现,虽然元素隐藏了,但是刷新页面会出现闪烁的问题。

项目源码:

在路由跳转中为 meta 添加参数,用于控制导航栏的 显示/隐藏:

// src/router/index.ts
const routes: array<routerecordraw> = [
    ...
    {
        path: '/home',
        component: () => import('@/views/home/home.vue'),
    },
    {
        path: '/login',
        component: () => import('@/views/login/login.vue'),
        meta: { hidenav: true }
    },
    {
        path: '/register',
        component: () => import('@/views/login/register.vue'),
        meta: { hidenav: true }
    },
    ...
]
<!-- main.vue -->
<template>
    <div id="main">
        <nav id="navigation" v-if="!$route.meta.hidenav">
            <aside></aside>
        </nav>
        <div id="content">
            <router-view></router-view>
        </div>
    </div>
</template>
<script setup lang="ts">
import aside from "../aside/aside.vue";
</script>

二、尝试解决

起初查看网友分享的资料,尝试为导航栏添加 v-cloak 并设置样式:

<template>
    <div id="main">
        <nav id="navigation" v-cloak v-if="!$route.meta.hidenav">
            <aside></aside>
        </nav>
        ...
    </div>
</template>
<style lang="less" scoped>
[v-cloak] {
    display: none;
}
</style>

在实践过程中发现,并无效果。

三、最终解决方案

解决思路:先隐藏导航栏,通过监听路由跳转的目的地来判断是否显示导航栏。该解决方案略显粗糙,粗糙的地方在于,需要手动排除部分页面,例如登录、注册页,根据自身项目,可能还需要手动排除其他页面(暂时没想到更好的解决方案≡(▔﹏▔)≡)。

<template>
    <div id="main">
        <nav id="navigation" ref="navref">
            <aside></aside>
        </nav>
        <div id="content">
            <router-view></router-view>
        </div>
    </div>
</template>
<script setup lang="ts">
import { ref, watch } from "vue";
import aside from "../aside/aside.vue";
import { useroute } from 'vue-router';
const route = useroute();
// 当用户跳转至登录页面时,f5刷新页面时,导航栏会出现闪烁,因此通过判断路由跳转的目的地来控制导航栏的 显示/隐藏
const navref = ref();
watch(() => route.path,() => {
    if(route.path == '/login' || route.path == '/register') {
        navref.value.style.display = "none";
    }else {
        navref.value.style.display = "block";
    }
})
</script>
<style lang="less" scoped>
#navigation {
    display: none;
}
</style>

四、最终效果演示

到此这篇关于处理 vue3 中隐藏元素刷新闪烁问题的文章就介绍到这了,更多相关vue刷新闪烁内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com