Element-UI源码学习——弹框组件

这篇具有很好参考价值的文章主要介绍了Element-UI源码学习——弹框组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

手写弹框组件


前言

首先,分析一下Element-UI的对话框,点击,会弹出一个对话框。对话框由具体的弹框内容、关闭或确认按钮、外围的遮罩层组成。首先,先看下elmentui的用法:

一、Element-UI的弹框

el-dialog组件里面可进行配置

<el-dialog
    v-model="dialogVisible"
    title="Tips"
    width="30%"
    :before-close="handleClose"
  >
    <span>This is a message</span>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogVisible = false">Cancel</el-button>
        <el-button type="primary" @click="dialogVisible = false"
          >Confirm</el-button
        >
      </span>
    </template>
  </el-dialog>

效果:
elementui弹窗组件,vue学习,ui,学习,javascript

二、如何自己手写?

1、dom实现:
外面的div实现遮罩层,里面的div是具体的内容

<div class="el_dialog">
   <div class="el_dialog__content">
        <slot/>
    </div>
</div>

css:

.el_dialog {
        position: fixed;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.5);
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        margin: 0;
        padding: 0;
    }
    .el_dialog__content {
        width: v-bind(width1);
        height: 400px;
        background-color: white;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
    }

2、弹框类的组件都需要直接渲染在body标签下面。因为弹框类组件都是绝对定位,如果在组件内部渲染,组件的css属性会影响弹框组件的渲染样式(可以尝试下,比如会出现浮动等),为了避免这种问题的出现,弹窗组件Dialog、Notification都需要渲染在body内部。
怎么渲染呢?可以使用vue3自带的Teleport,可以很方便地渲染到body上:

<template>
    <teleport
        to="body"
    >
        <div class="el_dialog">
            <div class="el_dialog__content" :style="DialogStyle">
                <slot/>
            </div>
        </div>
    </teleport>
</template>

3、为了使样式可以可配置,可以在使用组件时传入一个对象,这个对象里面包含了样式,然后在组件中绑定这个样式:

<template>
    <teleport
        to="body"
    >
        <div class="el_dialog">
            <div class="el_dialog__content" :style="DialogStyle">
                <slot/>
            </div>
        </div>
    </teleport>
</template>
<script>
export default {
  name:'Dialog',
  props: {
    DialogStyle: {
      type: Object,
      default: function () {
        return {
            width: '800px',
            height: '400px',
            'background-color': 'white',
            display: 'flex',
            'flex-direction': 'column',
            'justify-content': 'center',
            'align-items': 'center'
        };
      },
    },
  }
}
</script>

实现效果:
elementui弹窗组件,vue学习,ui,学习,javascript

弹框组件到此结束,全部代码可以从这下载https://github.com/LisaNcu/myElementUI.git文章来源地址https://www.toymoban.com/news/detail-523577.html

到了这里,关于Element-UI源码学习——弹框组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 页面滚动时隐藏element-ui下拉框/时间弹框

    场景 在类后台管理的系统中,当(有垂直滚动时)点击下拉框后滚动页面,会发现下拉项会遮盖住 layout 正常页面: 滚动后: 解决 在页面滚动或者缩放时隐藏下拉项即可(借助点击目标元素,下拉项会自动隐藏的特点) 使用

    2024年02月12日
    浏览(43)
  • element-ui:多个el-dialog弹框切换会出现闪烁

    使用多个element-ui组件el-dialog弹框切换 打开A弹框,点击关闭,紧接着打开B弹框 会出现一个明显的闪烁 给第一个弹框关闭加一点延迟 参考 【ElementUI】dialog弹窗出现闪屏问题解决办法

    2024年02月11日
    浏览(41)
  • Element-ui MessageBox.$alert()方法创建弹框页面跳转无法关闭

    点击取消按钮后返回上一页,但$alert()$alert()方法创建的弹框依旧会存在,或者点击浏览器回退按钮,效果一直alert弹框依旧存在,切element官网并没有提供主动关闭弹框的api方法,尝试通过$alert()中的 distinguishCancelAndClose 属性在beforeDestroy生命周期函数中触发esc按钮关闭弹框,但上面的弹

    2024年02月11日
    浏览(30)
  • vue+elementui项目打包后部署到测试环境icon全部丢失【element-ui】大版本升级element-ui后,icon全部丢失

    问题:vue+elementui项目打包后部署到测试环境icon全部丢失【element-ui】大版本升级element-ui后,icon全部丢失 解决办法及原因: elementui在2.12版本中icon数量较之2.4.9版本的扩展2倍不止。原来webpack中对于字体loader的限制是limit10000,就会将字体转换为base64,2.12版本中字节已经超过

    2024年02月16日
    浏览(44)
  • vue中使用element-ui,重复点击按钮或多个请求同时报错时弹出多个message弹框解决方法

    1. 用这种 2. 参考: vue中使用element-ui,重复点击按钮或多个请求同时报错时弹出多个message弹框解决方法_donggua_123的博客-CSDN博客

    2024年02月11日
    浏览(36)
  • element-ui组件

    一、图像组件 el-image:保留了原生的img的属性 二、导航菜单(NavMenu) 1、导航方向:通过mode属性设置 2、菜单项: 三、上传组件:Upload 示例: (1)使用elementUI的上传组件将图片上传到服务器并保存到数据库中 (2)在el-table控件中将上传的图片显示出来 实现过程: (1)给

    2024年02月02日
    浏览(25)
  • element-ui消息组件

    目录 一、elementUI的消息组件 1、MessageBox 弹框:是模态框 2、Message 消息提示:非模态框,常用于主动操作后的反馈提示。 3、Notification 通知 二、Form表单: 1、基本结构  2、表单控件 三、Dialog组件 1、使用方法 1、MessageBox 弹框:是模态框 ​ (1)消息提示:当用户进行操作时

    2024年02月02日
    浏览(77)
  • element-ui图像组件、上传组件、分页组件

    el-image:保留了原生的img的属性 1、导航方向:通过mode属性设置 2、菜单项 示例: (1)使用elementUI的上传组件将图片上传到服务器并保存到数据库中 (2)在el-table控件中将上传的图片显示出来 实现过程: (1)给数据库中的数据表增加一列(image_url):保存图片在服务器中

    2024年02月07日
    浏览(33)
  • Element-UI组件使用 --踩坑篇

    问题描述 : Element ui 中的 el-input ,当 input 仅有一项时,使用 @keyup.enter.native 事件绑定回车事 件,点击回车之后浏览器会刷新页面 问题原因 :由于当表单只有一个文本框时,按下回车将会触发表单的提交事件,导致页面的刷新 解决方法1 :在 el-form 加上 @submit.native.prevent ,

    2024年02月04日
    浏览(27)
  • 【Vue框架】Vue2中element-ui/mint-ui组件库——element-ui引入组件以及使用案例、mint-ui引入组件及使用案例

    element-ui 提供了大量的组件,如:布局组件、表单组件、JS组件等等。 Element-ui官网: https://element.eleme.cn/#/zh-CN 安装 Element-ui: npm i element-ui -S 1.1.1 引入组件 引入 Element 完整引入(在 main.js 中写入以下内容): 按需引入 借助 babel-plugin-component,我们可以只引入需要的组件,以达到

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包