单击按钮后隐藏组件(登录)并显示其他组件

Posted

技术标签:

【中文标题】单击按钮后隐藏组件(登录)并显示其他组件【英文标题】:Hide component (Login) after clicking button and show other components 【发布时间】:2021-11-22 03:17:52 【问题描述】:

我正在使用 BootstrapVue (VueJS 2)。

当我打开我的 PWA 时,我想查看我的标题(应该一直在那里)和我的 login.vue - 组件 component1component2 应该被隐藏。

在我的 login.vue 中单击我的 LOGIN 按钮后,我想隐藏我的 login.vue 并显示我的其他两个组件。

但我不知道如何解决这个问题..提前谢谢你!

<template>
  <header/>
  <login/>
  <component1/>
  <component2/> 
</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,
  


</script>
<template>
  <div class="mt-5 col-md-12">
    <div class="mt-2">User ID</div>
    <b-form-input></b-form-input>
  </div>

  <b-button class="mt-5 mb-5 btn-block"> Login </b-button>
</template>

【问题讨论】:

【参考方案1】:

首先,您需要在登录按钮中添加点击事件,以了解用户是否被点击。通过事件我们可以向父元素发出值

<b-button class="mt-5 mb-5 btn-block" @click="$emit('loginButtonClicked')"> Login </b-button>

之后,您需要修改父组件,如下所示;

<template>
  <header/>
  <login v-if="!hideLogin" @loginButtonClicked="hideLogin=true"/>
  <component1/>
  <component2/> 
</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 
      hideLogin: false
    
  


</script>

这里我们监听了父级中的事件并修改了其中的数据以通过v-if显示组件

【讨论】:

在我的组件周围添加了&lt;div v-if="hideLogin" @loginButtonClicked="hideLogin"&gt;&lt;/div&gt;,现在它运行良好!谢谢!【参考方案2】:

如果你使用vuex,在状态中创建一个属性,并在按钮调用的方法中改变它的值。否则,您可以在单击按钮时使用触发器并发出事件,并在父组件中侦听它,并更改数据属性的值。取决于这个数据值(或者你的 state 属性,如果你有 vuex),你可以在你的组件中使用 v-if 来选择你想要显示的组件。

【讨论】:

以上是关于单击按钮后隐藏组件(登录)并显示其他组件的主要内容,如果未能解决你的问题,请参考以下文章

其他组件使用localstorage登录/注销时如何在AppBar中显示和隐藏登录和注销按钮

如何隐藏组件是反应并显示另一个组件?

单击其他地方时触发组件方法

如何在单击时隐藏 ajax 组件?

单击表单按钮后,隐藏按钮 div 并显示隐藏的 div

登录 vuejs 后重新渲染导航栏