【问题标题】:Hiding an element after clicking outside in vue 2在vue 2中单击外部后隐藏元素
【发布时间】:2017-12-10 17:40:00
【问题描述】:

我正在尝试使用 Vue 2 和 laravel 在外部单击后隐藏侧边栏。此侧边栏是在导航栏组件内创建的。一开始我加了一个@click="showSidenav = !showSidenav"只是为了打开它,初始化数据到showSidenav: false。并且还添加了一个关闭锚标签来隐藏侧边栏。实际上工作正常,但是当我想到在侧边栏外单击时如何隐藏它呢?我创建了一个方法showSidenav 并执行元素的打开并尝试使用nextTick,但它与我调用该方法的时间相同。现在我在方法中使用 jquery 再次更改数据,但是当我再次单击汉堡菜单时,它不会更改数据。

template structure

<a href="#" v-on-clickaway="away" @click="openSidenav">Hamburger menu</a>

脚本

 import { mixin as clickaway } from 'vue-clickaway';
    export default {
         mixins: [ clickaway ],
         data() {
             return {
                 showSidenav: false,
             }
         },
         methods: {
             openSidenav: function () {
                 this.showSidenav = true
             },
             away: function () {
                this.showSidenav = false
             }
         }
    }

编辑:按照@Nathan 的建议添加了vue-clickaway

【问题讨论】:

  • 为什么要混合 dom 操作和 vue.js ?没有 jQuery 完全可行,哈哈。
  • @WilomGfx,是的,哈哈,我讨厌我为什么这样写:D

标签: jquery vue.js


【解决方案1】:

我刚遇到这个问题。使用vue-clickaway

他们的“hello world”示例:

import { mixin as clickaway } from 'vue-clickaway';

export default {
  mixins: [ clickaway ],
  template: '<p v-on-clickaway="away">Click away</p>',
  methods: {
    away: function() {
      console.log('clicked away');
    },
  },
};

【讨论】:

  • 嘿!我试试看。
  • 试过但没有运气。这就是我设置数据的方式away: function () { this.showSidenav = false }, 事情是它在我调用 openSidenav 的同时触发
  • 您可以在问题中包含您的模板代码吗?这将帮助我更好地了解您的设置方式。
  • 已经更新了上面的帖子。顺便说一下,我是用 npm 安装的。
  • 好吧,我真的很好奇,所以我看了看,基本上问题是,只要你点击将showSidenav 设置为true 的链接,你就会同时触发@987654327 @ 函数,然后将 showSidenav 设置为 false。解决方案是将两个元素包装在包装器div 中,并将vue-on-clickaway 放在该包装元素上。 Here 是一个 JSFiddle,它显示它正在工作。
猜你喜欢
  • 2020-11-20
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
相关资源
最近更新 更多