【问题标题】:(Vue.js) modal close event(Vue.js) 模态关闭事件
【发布时间】:2019-09-23 19:11:09
【问题描述】:

当我点击modal的外部区域时,我想要和modal的关闭按钮一样的事件。 (点击模态区域外区域时关闭模态的事件)

目前的进度是当点击关闭模态按钮时模态关闭。

Carousel.vue

<template>
  <div>
    <div v-for="(item, index) in photos" :key="index">
      <div @click="imgClick(item)" style="cursor:pointer;">
        <img :src="item.thumbnail" />
      </div>
      <Modal v-if='item.show' @close="item.show = false">
        <div slot='body'>
          <img :src="item.thumbnail" :class="`img-index--${index}`"/>
        </div>        
      </Modal>
    </div>
  </div>
</template>
<script>
import Modal from './Modal.vue'
export default {
  props: {
    items: { type: Array, default: () => [] }
  },
  data() {
    return {
      photos: {}
    }
  },
  created() {
    this.photos = this.items.map(item => {
      return { ...item, show: false }
    })
  },
  methods: {
    imgClick(item) {
      item.show = true
    }
  },
  components: {
    Modal: Modal
  }
}
</script>

Modal.vue

<template>
  <transition name="modal">
    <div class="modal-mask" @click="$emit('close')">
      <div class="modal-wrapper">
        <div class="app__phone">
          <div class="feed">
            <div class="post">
              <div class="header headroom">
                <div class="level-left">
                  <img src="../assets/imgs/user.gif" class="modal-header-img"/>
                  <div class="user">
                    <span class="username">username</span>
                    <button class="modal-default-button" @click="$emit('close')">Close</button>
                  </div>
                </div>
              </div>
              <slot name="modal-img"></slot>
              <div class="content">
                <div class="content-title">
                  <slot name="modal-tit"></slot>
                </div>
              </div>
            </div>
          </div> 
        </div>
      </div>
    </div>
  </transition>
</template>

当我在底部&lt;div&gt;添加点击事件时,当我点击模态框外时它会关闭,但当我点击模态框内的任意位置时它会关闭。

<div class="modal-mask" @click="$emit('close')">

这个链接在问题的接受答案中有一个小提琴示例。

https://stackoverflow.com/a/58023701/12066654

【问题讨论】:

  • 您是否使用某种 CSS 库(如 bootstrap)自己渲染模式?
  • @DavidWeldon 对不起。我会上传代码。

标签: vue.js button modal-dialog close-button


【解决方案1】:

您需要像这样向外部模态 div 添加一个处理程序:

<template id="modal">
  <div class="modal" @click.self="close">
    <div class="close" @click="close">&times;</div>
    <div class="body">
      <slot name="body" />
    </div>
  </div>
</template>

【讨论】:

  • 我在问题中添加了 Modal.vue 代码。抱歉,您能否再次确认问题?
  • 抱歉 - 我忘记包含 self 修饰符。有了这个改变,你的代码能工作吗?
  • 我使用self 解决了这个问题。谢谢你的帮助:)
猜你喜欢
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 2011-08-01
  • 2018-02-19
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多