在 Vue 中显示模态弹窗

发布于 2022-08-31 12:32:13 字数 3398 浏览 245 评论 0

模态框是完全用 JavaScript 构建的弹出窗口。 构建模态组件变得容易 使用 Vue 插槽 。 单击下面的按钮以查看基本模式。

构建模态组件

模态组件可以分解为 4 个重要元素:掩码、容器、页眉和页脚。 以下是这些元素在屏幕上的显示方式。

蒙版是部分隐藏页面的灰色背景,容器是包含页眉和页脚的白色框。下面是上述模式的 CSS,从 这个页面

.modal-mask {
  position: fixed;
  z-index: 9998;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  display: table;
  transition: opacity 0.3s ease;
}

.modal-wrapper {
  display: table-cell;
  vertical-align: middle;
}

.modal-container {
  width: 300px;
  margin: 0px auto;
  padding: 20px 30px;
  padding-bottom: 40px;
  background-color: #fff;
  border-radius: 2px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);
  transition: all 0.3s ease;
}

.modal-default-button {
  float: right;
}

/*
 * The following styles are auto-applied to elements with
 * transition="modal" when their visibility is toggled
 * by Vue.js.
 *
 * You can easily play with the modal transition by editing
 * these styles.
 */

.modal-enter {
  opacity: 0;
}

.modal-leave-active {
  opacity: 0;
}

.modal-enter .modal-container,
.modal-leave-active .modal-container {
  -webkit-transform: scale(1.1);
  transform: scale(1.1);
}

modal 组件是一个标准的 Vue 组件,有 2 个命名槽: headerfooter,下面是 modal 组件定义。

Vue.component('modal', {
  template: `
  <transition name="modal">
    <div class="modal-mask">
      <div class="modal-wrapper">
        <div class="modal-container">
          <div class="modal-body">
            <slot name="body">
            </slot>
          </div>

          <div class="modal-footer">
            <slot name="footer">
              <button class="modal-default-button" @click="$emit('close')">
                OK
              </button>
            </slot>
          </div>
        </div>
      </div>
    </div>
  </transition>
  `
});

modal 组件本身并没有做太多事情。 它只公开了 2 个命名插槽。 footer slot 有一个默认值,只要用户单击 确定 按钮,就会发出一个 关闭 事件。

用法

你如何实际使用这个模态组件? 您需要 使用 v-if,因为如果模态组件被渲染,遮罩将隐藏页面。 以下是支持此页面模式的 Vue 应用程序:

const app = new Vue({
  data: () => ({ showModal: false }),
  template: `
    <div>
      <button @click="showModal = true">Show Modal</button>
      <modal v-if="showModal" @close="showModal = false">
        <template v-slot:body>
          Hello, modal!
        </template>
      </modal>
    </div>
  `
});
app.$mount('#vue-modal-example');

v-if 指令告诉 Vue 仅在以下情况下挂载模式 setModal 是真的。单击按钮设置 showModal = true,它告诉 Vue 挂载模态框。 <template v-slot:body> 告诉 Vue 在 body 投币口。 既然没有 footerslot,Vue 使用默认的 footer HTML。

最后,一旦模态框发出 关闭 事件,该模板负责隐藏模态框。 modal 组件 不允许 关闭自己,调用代码负责隐藏它。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

无言温柔

暂无简介

文章
评论
25 人气
更多

推荐作者

微信用户

文章 0 评论 0

小情绪

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

笨死的猪

文章 0 评论 0

彭明超

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文