返回顶部
首页 > 资讯 > 精选 >element Diaolog弹窗打开后怎么渲染组件
  • 795
分享到

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

2023-07-05 00:07:18 795人浏览 独家记忆
摘要

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

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

    --结束END--

    本文标题: element Diaolog弹窗打开后怎么渲染组件

    本文链接: https://www.lsjlt.com/news/348470.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • element Diaolog弹窗打开后怎么渲染组件
      本篇内容介绍了“element Diaolog弹窗打开后怎么渲染组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!element--Diao...
      99+
      2023-07-05
    • element--Diaolog弹窗打开之后渲染组件方式
      目录element--Diaolog弹窗打开之后渲染组件描述遇到的问题Element组件的坑: 抽屉drawer和弹窗dialog业务场景针对第一个问题,具体解决方案如下针对第二个问...
      99+
      2023-01-14
      element Diaolog弹窗 渲染组件 Diaolog弹窗
    • 揭开 Vue.js 和 Element UI 的幕后故事:渲染引擎与组件库的交响曲
      揭开渲染引擎:Vue.js 的核心心脏 Vue.js 采用了一种称为 Virtual DOM(虚拟 DOM)的渲染引擎。Virtual DOM 是一个轻量级版本的真实 DOM,它只存在于内存中。当数据发生变化时,Vue.js 只需要更新...
      99+
      2024-03-07
      Vue.js、Element UI、渲染引擎、组件库、Virtual DOM、条件渲染、响应式系统
    • Vue基于Element-ui怎么实现表格弹窗组件
      本篇内容主要讲解“Vue基于Element-ui怎么实现表格弹窗组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue基于Element-ui怎么实现表格弹窗组件”吧!效果图使用方式acTab...
      99+
      2023-06-30
    • react怎么让子组件不渲染
      本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react怎么让子组件不渲染?React 父组件重新渲染,子组件不需要渲染的三种性能优化方式(PureComponent,memo,shouldCompo...
      99+
      2023-05-14
      组件 React
    • vue弹窗组件怎么用
      这篇文章主要为大家展示了“vue弹窗组件怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue弹窗组件怎么用”这篇文章吧。具体...
      99+
      2024-04-02
    • Vue组件渲染与更新怎么实现
      这篇“Vue组件渲染与更新怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue组件渲染与更新怎么实现”文章吧。1. ...
      99+
      2023-07-05
    • Vue中的动态组件怎么实现渲染
      本篇内容介绍了“Vue中的动态组件怎么实现渲染”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、什么是动态组件动态组件指的是动态切换组件的显...
      99+
      2023-06-30
    • vue弹窗消息组件怎么用
      这篇文章主要介绍vue弹窗消息组件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本来打算写一个那种提示完了自动消失的弹窗的,但是没有想好淡入淡出的效果。所以暂时算是半成品。练习...
      99+
      2024-04-02
    • 聊聊Vue怎么通过JSX动态渲染组件
      3.2 基本用法3.2.1 函数式组件我们在组件中,也可以嵌入ButtonCounter组件。const ButtonCounter = { name: "button-counter", props: [&qu...
      99+
      2023-05-14
      组件 JSX Vue vue3
    • 怎么使用Key对Vue组件进行重新渲染
      这篇文章主要介绍“怎么使用Key对Vue组件进行重新渲染”,在日常操作中,相信很多人在怎么使用Key对Vue组件进行重新渲染问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么...
      99+
      2024-04-02
    • ElementUI组件Dialog弹窗再次打开表单仍显示上次数据怎么解决
      这篇文章主要介绍了ElementUI组件Dialog弹窗再次打开表单仍显示上次数据怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ElementUI组件Dialog弹窗再次打开表单仍显示上次数据怎么解决文...
      99+
      2023-07-05
    • c#窗体文件怎么打开
      要打开 c# 窗体文件,可以使用 visual studio 或 dotpeek:使用 visual studio:从文件菜单中选择“打开”>“项目/解决方案”,定位并选择窗体文件...
      99+
      2024-05-11
      c#
    • python怎么打开文件窗口
      可以在 python 中使用 open() 函数打开文件窗口。具体步骤如下:导入 tkinter 库,并将其命名为 tk。定义一个 open_file_window() 函数来打开文件窗...
      99+
      2024-05-05
      python
    • Vue3怎么将组件手动渲染到指定元素中
      Vue 的多应用实例还记得在创建项目时,我们使用了createApp创建一个App实例,然后将它挂载到了#app里。实际上,在一个 DOM 环境中可以同时存在多个 App 实例,也就是多个 Vue 应用。利用这一点,可以再次创建一个 App...
      99+
      2023-05-21
      Vue3
    • access打开数据库弹出窗体怎么设置
      要设置在Access中打开数据库时弹出窗体,可以按照以下步骤进行操作:1. 在Access中创建一个窗体,可以通过“创建”选项卡中的...
      99+
      2023-09-09
      access 数据库
    • vue中怎么实现一个toast弹窗组件
      本篇文章给大家分享的是有关vue中怎么实现一个toast弹窗组件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先,我们来分析一下弹窗组件的特...
      99+
      2024-04-02
    • vue中的slot封装组件弹窗怎么实现
      这篇文章主要介绍了vue中的slot封装组件弹窗怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue中的slot封装组件弹窗怎么实现文章都会有所收获,下面我们一起来看看吧。slot封装组件弹窗<t...
      99+
      2023-06-30
    • 笔记本电脑打开文件夹老是弹出新窗口怎么办
      这篇文章将为大家详细讲解有关笔记本电脑打开文件夹老是弹出新窗口怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。鼠标点击计算机,打开选择组织→文件夹和搜索选项。在窗口中,点击常规,选择点击在同一窗口中打...
      99+
      2023-06-28
    • vue3怎么使用defineAsyncComponent与component标签实现动态渲染组件
      本文小编为大家详细介绍“vue3怎么使用defineAsyncComponent与component标签实现动态渲染组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue3怎么使用defineAsyncComponent与compone...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作