Vue JS - 如何隐藏以前的下拉内容

Posted

技术标签:

【中文标题】Vue JS - 如何隐藏以前的下拉内容【英文标题】:Vue JS - How to hide previous dropdown content 【发布时间】:2021-09-12 11:12:33 【问题描述】:

我正在创建一个下拉菜单,问题是单击另一个下拉菜单时我无法隐藏下拉内容

<template>
  <div class="dropdown-container">
    <div
      v-for="(i, index) in contentInfo"
      :key="index"
      @click="showContent(i)"
      class="dropdown"
    >
      <div class="dropdown-title">
        <p> i.text </p>
        <div v-show="i.show">
          <p> i.content </p>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default 
  methods: 
    showContent(i) 
      i.show = !i.show;
    ,
  ,
  data() 
    return 
      contents: false,
      contentInfo: [
        
          text: "What is Lorem Ipsum?",
          content:
            "Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots ",
          show: false,
        ,
        
          text: "Where can I get some?",
          content:
            "There are many variations of passages of Lorem Ipsum available, but",
          show: false,
        ,
      ],
    ;
  ,
;
</script>

再次,当你点击文本时,会打开一个下拉菜单,但是当你点击另一个文本时,旧菜单不会折磨,我需要旧菜单来折磨

【问题讨论】:

您可以尝试使用onBlur 事件吗?或者如果您需要事件冒泡,您可以使用focusout 事件。 【参考方案1】:

这是在同一 showContent() 方法中隐藏所有其他下拉列表的问题。您可以将当前索引而不是i 传递给它,以便您可以访问索引进行比较:

<div
  v-for="(i, index) in contentInfo"
  :key="index"
  @click="showContent(index)"
  class="dropdown"
>

然后在你的showContent 方法中:

showContent(currentIndex) 
  this.contentInfo.forEach((entry, index) => 
    // Toggle current dropdown
    if (index === currentIndex) 
      entry.show = !entry.show;
     else 
      // Hide all other dropdowns
      entry.show = false;
    
  );

如果你想让它简洁,它是一个简单的单行:

showContent(currentIndex) 
    this.contentInfo.forEach((entry, index) => entry.show = (index === currentIndex ? !entry.show : false));

【讨论】:

以上是关于Vue JS - 如何隐藏以前的下拉内容的主要内容,如果未能解决你的问题,请参考以下文章

如何将点击卡片的 id 和卡片内容传递给 vue.js 中的另一个组件?

如何利用Vue.js库中的v-show显示和隐藏元素

vue清空表单数据后显示所有列表内容

没有滚动内容时如何下拉协调器布局

js中怎么实现下拉框中的值选中一个之后则这个在以后的下拉框就隐藏或者删除

vue下拉框不能复制