【问题标题】:How to close dropdown when it is rendered to other page in VueVue中渲染到其他页面时如何关闭下拉菜单
【发布时间】:2021-12-28 15:12:46
【问题描述】:

我有一个购物车下拉菜单,如下所示:

所以我的问题是每当我转到下一页或做某事时,它都会保持打开状态。但是当我转到另一个页面时,我希望它关闭。为此,我的组件在这里:

<template>
    <div class="custom-select" :tabindex="tabindex" @blur="open = false">
        <div class="selected" :class="{ open: open }" @click="open = !open">
            {{ selected.name }}
        </div>
        <div class="items" :class="{ selectHide: !open }">
            <div v-if="defaultValue != ''">{{ defaultValue }}</div>
            <div v-for="(option, i) of options" :key="i"
                 @click=" selected = option; open = false; $emit('input', option);">
                {{ option.name }}
            </div>
        </div>
    </div>
</template>


<script>

export default {
    props: {
        options: {
            type: Array,
            required: true,
        },
        defaultValue: {
            type: String,
            required: false,
            default: "Choose an option",
        },
        tabindex: {
            type: Number,
            required: false,
            default: 0,
        },
    },
    data() {
        return {
            open: false,
            selected: this.setDefaultValue(),
        };
    },
    mounted() {
        this.$emit("input", this.selected);
    },
    methods: {
        setDefaultValue() {
            if (this.defaultValue == '' && this.options.length > 0) {
                return this.options[0];
            }
            return {name: this.defaultValue};
        }
    }
};
</script>

我愿意接受任何形式的解决方案来解决这个问题。

【问题讨论】:

  • 你好@magic bean,你能分享openselectHide类的css代码吗?你是如何切换到另一个页面的? Vue路由器?此外,jsfiddle 中的演示或类似的东西有助于更好地理解上下文。

标签: javascript css vue.js drop-down-menu dropdown


【解决方案1】:

您可以创建一个“点击外部”指令,只要您在菜单外部点击,它就会执行关闭菜单功能。然后,当单击菜单中的任何操作时,您也会调用关闭菜单函数。

main.js 中的示例指令:

Vue.directive('click-outside', {
  bind: function (el, binding, vnode) {
    el.clickOutsideEvent = function (event) {
      // Check that click was outside the el and its children
      if (!(el === event.target || el.contains(event.target))) {
        // Call the specified method
        vnode.context[binding.expression](event)
      }
    }
    document.body.addEventListener('click', el.clickOutsideEvent)
    document.body.addEventListener('touchend', el.clickOutsideEvent)
  },
  unbind: function (el) {
    document.body.removeEventListener('click', el.clickOutsideEvent)
    document.body.removeEventListener('touchend', el.clickOutsideEvent)
  }
})

在您的菜单中:

<div v-click-outside="closeMenu"></div>

【讨论】:

  • 非常感谢您的回答。这很有帮助,但正如您所见,我的购物车包含“前往购物车”按钮。当我单击它时,它会呈现到另一个页面,在这种情况下,它不会关闭。如果我在外面点击,它已经自己关闭了
  • 我没有看到您的“前往购物车”按钮的代码,但我想它会执行一个方法,或者执行一些可以放入方法中的操作。在该方法中,您可以在执行 Go To Cart 代码之前调用关闭菜单方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
相关资源
最近更新 更多