我的编程空间,编程开发者的网络收藏夹
学习永远不晚

element Diaolog弹窗打开后怎么渲染组件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

element Diaolog弹窗打开后怎么渲染组件

本篇内容介绍了“element Diaolog弹窗打开后怎么渲染组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    element--Diaolog弹窗打开之后渲染组件

    描述

    父子两个组件,父组件打开子组件弹窗,然后执行方法请求接口,获取数据之后渲染页面,且每次点击都执行该方法。

    遇到的问题

    最开始简单地将方法放在子组件mounted里面,只有第一次打开弹窗会执行方法。

    了解到,弹窗只创建了一次。所以,在想是不是可以用keep-alive模式下的actived,然而并没有什么用。actived和deactived只在keep-alive使用时生效。

    然后想到在打开弹窗时候,强行调用子组件的方法

    // initForm: 子组件方法// this.dialog.data.id: 子组件的请求接口的参数this.$refs.dialog.initForm(this.dialog.data.id)

    这次算是ok了,但是仅仅这样还不够。多次请求接口发现,如果接口请求速度够快,方法会提前执行,渲染组件。

    这本来不是什么坏事,坏就坏在渲染阶段。如果数据先一步到位,然后开始渲染组件,这时候弹窗还没有创建虚拟dom,会有bug。例如:我的弹窗如果是一个echart的图表,需要绑定一个dom节点进行渲染。节点都没有渲染出来,就会报错。

    所以,第一次使用时候采用的方案:

    直接在调用子组件方法的外面包了一个setTimeout,让弹窗飞一会,然后再渲染。

    后面回过头看了一下,其实不用这么麻烦,element中弹窗组件有个回调函数

    element Diaolog弹窗打开后怎么渲染组件

    选择opened

    <el-button @click="edit(id)">修改</el-button><el-button @click="add">新增</el-button><el-dialog  :title="dialog.title"  :visible.sync="dialog.visible"  :width="dialog.width"  center  @opened="initForm"> <!-- element自带的弹窗打开回调函数 -->  <component :is="dialog.name" ref="dialog"></component><!-- 动态组件:子组件 --></el-dialog> <script>import { Add, Edit } from './Dialog'export default {  components: {    Add,    Edit  },  data () {    return {      dialog: { // 弹窗组件传递数据        title: '',        visible: false,        width: '',        name: '' // 组件名      }    }  },  methods: {    // 新增链接配置信息    add () {      this.dialog = {        visible: true,        title: '新增连接配置信息',        width: '1000px',        name: 'add-config'      }    },    // 编辑修改设备信息    edit (id) {      this.dialog = {        visible: true,        title: '修改连接配置信息',        width: '1000px',        name: 'edit-config',        data: id      }    },    // 弹窗打开回调(更新数据)    initForm () {      switch (this.dialog.name) {        case 'add':          this.$refs.dialog.initForm()          break        case 'edit':          this.$refs.dialog.initForm(this.dialog.data.id)          break        default:          break      }    }  }}</script>

    Element组件的坑: 抽屉drawer和弹窗dialog

    业务场景

    因为项目需要封装组件,考虑二次封装抽屉组件el-drawer,在父组件控制抽屉组件的显示隐藏。需要在指定的组件中打开抽屉。在抽屉组件el-drawer里使用自己封装的一个自定义组件。

    存在以下两个大问题:

    • 父组件控制抽屉组件的显示隐藏效果无法呈现

    • 抽屉组件里的自定义组件没有加载/创建出来

    针对第一个问题,具体解决方案如下

    父组件:

    <Drawer :isShowDrawer.sync = "isShowDrawer" @closeDrawer="isShowDrawer = $event"></Drawer>

    子组件Drawer:

     <el-drawer :visible.sync="isShow" direction="rtl" ref="drawerExam"></el-drawer>  ...     props: {        isShowDrawer: {          type: Boolean,          default: false       },     },     computed: {        isShow: {            set(val) {                this.$emit('closeDrawer', val);            },            get() {                return this.isShowDrawer;            }        },    },

    若想实现,在指定的组件中打开抽屉,需要添加以下样式

    父组件样式:

    {    position: relative;    overflow: hidden;}

    抽屉组件:

    设置position为绝对定位,但是会出现一个问题:v-modal遮罩层是满屏显示的

    element Diaolog弹窗打开后怎么渲染组件

     因此最终解决方案为:

    先在抽屉组件外套一层div标签,再修改内部样式

    <div class="drawerExam-container">     <el-drawer :visible.sync="isShow" direction="rtl" ref="drawerExam" @open="openDrawer()"></el-drawer></div> ...  .drawerExam-container {    ::v-deep .v-modal {        position: absolute;    }}

    针对第二个问题,具体解决方案如下

    在抽屉组件里,引入了自己封装的组件Checkbox,不能出现的原因是:Element官网有提到

    element Diaolog弹窗打开后怎么渲染组件

    如下我在抽屉组件中引入了Checkbox(自己封装的组件),其中,dataList是父组件传给Checkbox的数据,chooseClass是Checkbox返回来的数据

     <el-drawer :visible.sync="isShow" direction="rtl" ref="drawerExam" @open="openDrawer()">    <Checkbox :dataList="easy" @chooseEasy="updateForm" ref="easyRef"></Checkbox></el-drawer>

    解决方法:

    给el-drawer增加open回调函数

    通过使用Checkbox内部方法赋值的方式,让Checkbox组件能够拥有值(因为在Checkbox组件内接收不到父组件传过去的dataList,才考虑使用Checkbox组件内部方法直接给组件赋值

    el-drawer的open回调函数:...        openDrawer() {            this.$nextTick(() => {                setTimeout(() => {                    this.$refs.easyRef.UpdateList(this.easy);                }, 0)            })         },   Checkbox组件:...        UpdateList(arr) {            this.newDataList = arr;            // 置空该组件原有的值            this.checkboxGroup = [];            this.chooseEasy();        },         // 多选选中后给父组件传值        chooseEasy() {            this.$emit('chooseEasy', this.checkboxGroup);        },

    “element Diaolog弹窗打开后怎么渲染组件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    element Diaolog弹窗打开后怎么渲染组件

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    element Diaolog弹窗打开后怎么渲染组件

    本篇内容介绍了“element Diaolog弹窗打开后怎么渲染组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!element--Diao
    2023-07-05

    element--Diaolog弹窗打开之后渲染组件方式

    这篇文章主要介绍了element--Diaolog弹窗打开之后渲染组件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-14

    Vue基于Element-ui怎么实现表格弹窗组件

    本篇内容主要讲解“Vue基于Element-ui怎么实现表格弹窗组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue基于Element-ui怎么实现表格弹窗组件”吧!效果图使用方式acTab
    2023-06-30

    揭开 Vue.js 和 Element UI 的幕后故事:渲染引擎与组件库的交响曲

    Vue.js 和 Element UI 的强强联手创造了一个强大的前端开发生态系统,其核心在于它们的渲染引擎和组件库的完美结合。
    揭开 Vue.js 和 Element UI 的幕后故事:渲染引擎与组件库的交响曲
    2024-03-07

    ElementUI组件Dialog弹窗再次打开表单仍显示上次数据怎么解决

    这篇文章主要介绍了ElementUI组件Dialog弹窗再次打开表单仍显示上次数据怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ElementUI组件Dialog弹窗再次打开表单仍显示上次数据怎么解决文
    2023-07-05

    笔记本电脑打开文件夹老是弹出新窗口怎么办

    这篇文章将为大家详细讲解有关笔记本电脑打开文件夹老是弹出新窗口怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、鼠标点击计算机,打开选择组织→文件夹和搜索选项。2、在窗口中,点击常规,选择点击在同一
    2023-06-28

    笔记本电脑打开软件自动弹出确认提示窗口怎么办

    这篇文章给大家分享的是有关笔记本电脑打开软件自动弹出确认提示窗口怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.登录到系统桌面,点击开始菜单 - 控制面板,在打开的控制面板窗口中点击打开“系统和安全”。2
    2023-06-28

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录