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

Vue2 + BootstrapVue 点击登录按钮后隐藏Login组件显示其他组件如何实现

实现方案

核心通过Vue2父子组件通信+v-if指令控制组件显隐即可完成需求,具体修改如下:

1. 修改App.vue

在父组件维护登录状态,通过状态控制各组件显隐,同时监听登录组件的登录成功事件更新状态:

<template>
  <header/>
  <login @login-success="handleLoginSuccess" v-if="!isLogined"/>
  <component1 v-if="isLogined"/>
  <component2 v-if="isLogined"/> 
</template>

<script>
import header from './components/header.vue'
import component1 from './components/component1.vue'
import component2 from './components/component2.vue' 
import login from './components/login.vue'

export default {
  name: 'App',
  components: {
    header,
    component1,
    component2,
    login,
  },
  data() {
    return {
      // 登录状态,默认未登录
      isLogined: false
    }
  },
  methods: {
    handleLoginSuccess() {
      // 收到登录成功通知后修改状态
      this.isLogined = true
    }
  }
}
</script>

2. 修改login.vue

给登录按钮绑定点击事件,触发后向父组件发送登录成功的通知:

<template>
  <div class="mt-5 col-md-12">
    <div class="mt-2">User ID</div>
    <b-form-input v-model="userId"></b-form-input>
  </div>
  <b-button class="mt-5 mb-5 btn-block" @click="handleLogin"> Login </b-button>
</template>

<script>
export default {
  data() {
    return {
      userId: ''
    }
  },
  methods: {
    handleLogin() {
      // 这里可以先加登录校验逻辑,校验通过后触发父组件事件
      this.$emit('login-success')
      // 如果需要传递用户信息给父组件,可以改成 this.$emit('login-success', this.userId)
    }
  }
}
</script>

如果需要刷新页面后仍然保持登录状态,可以把isLogined状态存在localStorage里,初始化的时候从本地存储读取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:45:02