You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue项目登录成功后如何动态更改导航栏下拉菜单项

解决方案

1. 修正Navbar组件的下拉项判断逻辑

你当前导航栏的两个下拉选项判断条件完全相同,且未登录的展示逻辑写反了,先修改模板部分代码:

<template>
    <nav class="navbar navbar-expand-lg shadow">
        <div class="container navbar-container">
            <div class="navbar navbar-profile">
                <div class="dropdown">
                    <button class="btn dropdown-toggle" type="button" id="dropdownProfile" data-toggle="dropdown"
                            aria-haspopup="true" aria-expanded="false">
                        <i class="fa fa-fw fa-user"></i>
                    </button>
                    <ul class="dropdown-menu dropdown-menu-left">
                        <!-- 未认证展示登录注册入口 -->
                        <li v-if="!authenticated"><router-link :to="{ name: 'login' }">Sign In/Register</router-link></li>
                        <!-- 已认证展示个人中心入口 -->
                        <li v-if="authenticated"><router-link :to="{ name: 'profile' }">Profile</router-link></li>
                    </ul>
                </div>
            </div>
        </div>
    </nav>
</template>

接着修改Navbar组件的逻辑部分,同步登录状态:

<script>
import authHelper from "../helpers/authHelper";
import GENERAL_APP_CONSTANTS from "../constants/GeneralAppConstants";

export default {
    data() {
        return {
            authenticated: false,
            authenticationFailed: false,
        };
    },
    // 组件初始化时先判断当前登录状态
    beforeMount() {
        this.authenticated = authHelper.validAuthentication();
    },
    mounted() {
        // 监听全局登录状态变更事件,同步更新本地状态
        EventBus.$on(GENERAL_APP_CONSTANTS.Events.CheckAuthentication, () => {
            this.authenticated = authHelper.validAuthentication();
        });
    },
    // 组件销毁前移除事件监听,避免内存泄漏
    beforeDestroy() {
        EventBus.$off(GENERAL_APP_CONSTANTS.Events.CheckAuthentication);
    }
};
</script>

2. 登录成功后触发全局状态更新

修改Login组件的signIn方法,登录成功后发送全局事件通知所有组件更新登录状态:

methods: {
    signIn: function () {
        authHelper.signIn(this.email, this.password, () => {
            // 触发全局登录状态更新事件
            EventBus.$emit(GENERAL_APP_CONSTANTS.Events.CheckAuthentication);
            this.$router.push({name: 'home'});
        });
    }
}

可选补充

后续开发退出登录功能时,退出成功后也触发一次CheckAuthentication事件,导航栏会自动更新为未登录状态。

内容的提问来源于stack exchange,提问作者magic bean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:24:05