【问题标题】:Hiding a dropdown in Vuejs by clicking outside (component)通过单击外部(组件)在 Vuejs 中隐藏下拉菜单
【发布时间】:2019-10-27 01:28:06
【问题描述】:

我正在一个 Vuejs 项目上创建一个菜单组件。这个菜单有 2 个下拉菜单,我已经创建了一些方法并使用了 Vue 指令,所以当我单击其中 1 个时,其他隐藏,反之亦然,我还想知道如何通过单击外部来隐藏它们。

我尝试了 2 个 Vue 库,但对我不起作用。另外,如果可能的话,我想手动而不是外部执行此操作。

HTML:

<!-- menu -->
<div>
  <ul>
    <li><span>Home</span></li>
    <li v-on:click="toggle1(), dropAreas =! dropAreas">
      <span>Areas</span>
    </li>
    <li v-on:click="toggle2(), dropAdmin =! dropAdmin">
      <span>Administration</span>
    </li>
  </ul>
</div>
<!-- /menu -->
<!-- dropdowns-->
<div v-if="dropAreas">
  <ul>
    <li>
      <span>Kitchen</span>
    </li>
    <li>
      <span>Baths</span>
    </li>
  </ul>
</div>
<div v-if="dropAdmin">
  <ul>
    <li>
      <span>Profile</span>
    </li>
    <li>
      <span>Services</span>
    </li>
  </ul>
</div>
<!-- /dropdowns-->

JS

data () {
    return {
      dropAreas: false,
      dropAdmin: false
    }
  },
  methods: {
    toggle1 () {
      if (this.dropAdmin === true) {
        this.dropAdmin = false
      }
    },
    toggle2 () {
      if (this.dropAreas === true) {
        this.dropAreas = false
      }
    }
  }

*此代码在另一个组件“Home”中被调用,如下所示:

<template>
  <div>
    <menu></menu>
    <!-- [...] -->
  </div>
</template>

关于如何手动完成的任何想法?可能吗?谢谢。

【问题讨论】:

标签: javascript vue.js


【解决方案1】:

这有点小技巧,但您可以使用 tabindex HTML attribute:focus CSS pseudo-class 来做到这一点:

new Vue({

  el: '#app',
  template: `
    <div class="container">
      <div
      ref="menu"
      id="menu"
      tabindex="0"
      >Menu</div>
      <ul id="dropdown">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
      </ul>
    </div>
  `

});
#menu {
  display: inline-block;
  padding: 1em;
  border: 1px solid #e6e6e6;
  cursor: pointer;
}

#dropdown {
  display: none;
}

#menu:focus + #dropdown {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>

<div id="app"></div>

【讨论】:

  • 谢谢!其实我是在用 SCSS/SASS 做这个项目,这会一样吗?
  • @helleworld_ 是的,它会起作用。如果你写对了,你的 SCSS/SASS 也会被转换成 CSS。但我必须提到tabindex 会干扰浏览器的本机选项卡序列。所以只有在它不会破坏你的 UI/UX 时才使用它
猜你喜欢
  • 2018-02-12
  • 1970-01-01
  • 2010-11-18
  • 2017-03-01
  • 2017-07-08
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多