在 Vue 中显示模态弹窗

发布于 2022-08-31 12:32:13 字数 3398 浏览 236 评论 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技术交流群

发布评论

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

关于作者

无言温柔

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

qq_7J1imQ

文章 0 评论 0

《一串符号》

文章 0 评论 0

hls.

文章 0 评论 0

雅心素梦

文章 0 评论 0

塔塔猫

文章 0 评论 0

微信用户

文章 0 评论 0

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