主頁 > 企業開發 > 記錄--vue3優雅的使用element-plus的dialog

記錄--vue3優雅的使用element-plus的dialog

2023-05-18 08:34:46 企業開發

這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

如何優雅的基于 element-plus,封裝一個夢中情 dialog

優點

擺脫繁瑣的 visible 的命名,以及反復的重復 dom,

想法

將 dialog 封裝成一個函式就能喚起的組件,如下:

addDialog({
  title: "測驗", //彈窗名
  component: TestVue, //組件
  width: "400px", //彈窗大小
  props: {
    //傳給組件的引數
    id: 0
  },
  callBack: (data: any) => {
    //當彈窗任務結束后,呼叫父頁面的回掉函式,(比如我新增完成了需要重繪串列頁面)
    console.log("回呼函式", data)
  }
})

效果圖

 

dialog.gif

基于 el-dialog 進行初步封裝

// index.ts
import { reactive } from "vue"
type dialogOptions = {
  title: string
  component: any
  props?: Object
  width: string
  visible?: any
  callBack?: Function
}
export const dialogList: dialogOptions[] = reactive([])

export const addDialog = (options: dialogOptions) => {
  dialogList.push(Object.assign(options, { visible: true }))
}

export const closeDialog = (item: dialogOptions, i: number, args?: any, isNativeClose?: boolean) => {
  dialogList.splice(i, 1)
  if (!isNativeClose) item.callBack && item.callBack(...args)
}
<template>
  <Teleport to="body">
    <el-dialog
      v-for="(item, index) in dialogList"
      :key="index"
      :title="item.title"
      :
      v-model="item.visible"
      @close="() => closeDialog(item, index, '', true)"
    >
      <component :is="item.component" v-bind="item.props" @close="(...args:any) => closeDialog(item, index, args)" />
    </el-dialog>
  </Teleport>
</template>

<script setup lang="ts">
  import { dialogList, closeDialog } from "./index"
</script>
  • 首先定義了 dialogList,它包含了所有彈窗的資訊,
  • component 使用 componet is 去動態加載子組件
  • addDialog 呼叫喚起彈窗的函式
  • closeDialog 關閉彈窗的函式

在app.vue中掛載

<script setup>
import Mydialog from "@/components/gDialog/index.vue"
</script>

<template>
 <router-view />
 <Mydialog></Mydialog>
</template>

<style scoped>

</style>

使用

創建一個彈窗組件

<!-- test.vue -->
<template>
  父彈窗
  <el-button type="primary" @click="openChildDialog">打開子dialog</el-button>
  <el-button type="primary" @click="closeDialog">關閉彈窗</el-button>
</template>

<script setup lang="ts">
  import { addDialog } from "@/components/gDialog/index"
  import childVue from "./child.vue"
  const props = defineProps(["id"])
  console.log(props.id, "props")
  const emit = defineEmits(["close"])
  const closeDialog = () => {
    emit("close", 1, 2, 34)
  }
  const openChildDialog = () => {
    addDialog({
      title: "我是子dialog",
      width: "500px",
      component: childVue
    })
  }
</script>

在串列頁面喚醒彈窗

<!-- list.vue -->
<template>
  串列頁
  <el-button type="primary" @click="openDialog">打開dialog</el-button>
</template>
<script setup lang="ts">
import { addDialog } from "@/components/gDialog/index"
import TestDialog from "./test.vue"
const openDialog = () => {
  addDialog({
    title: "我是dialog",
    width: "500px",
    props:{
      id:0
    }
    component: TestDialog,
    callBack: (data: any) => {
      //當彈窗任務結束后,呼叫父頁面的回掉函式,(比如我新增完成了需要重繪串列頁面)
      console.log("回呼函式", data)
    }
  })
}

多層級彈窗嵌套

<!-- child.vue -->
<template>
  子彈窗
  <el-button type="primary" @click="closeDialog">關閉彈窗</el-button>
</template>

<script setup lang="ts">
  import { addDialog } from "@/components/gDialog/index"
  const emit = defineEmits(["close"])
  const closeDialog = () => {
    emit("close", 1, 2, 34)
  }
</script>

附上代碼

代碼

本文轉載于:

https://juejin.cn/post/7224007334514638903

如果對您有所幫助,歡迎您點個關注,我會定時更新技術檔案,大家一起討論學習,一起進步,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/552731.html

標籤:其他

上一篇:簡單聊兩句前端模塊化

下一篇:返回列表

標籤雲
其他(159232) Python(38148) JavaScript(25433) Java(18055) C(15228) 區塊鏈(8267) C#(7972) AI(7469) 爪哇(7425) MySQL(7191) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5340) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4572) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2433) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1975) 功能(1967) Web開發(1951) HtmlCss(1938) python-3.x(1918) C++(1917) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 記錄--vue3優雅的使用element-plus的dialog

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 如何優雅的基于 element-plus,封裝一個夢中情 dialog 優點 擺脫繁瑣的 visible 的命名,以及反復的重復 dom。 想法 將 dialog 封裝成一個函式就能喚起的組件。如下: addDialog({ title: ......

    uj5u.com 2023-05-18 08:34:46 more
  • 簡單聊兩句前端模塊化

    在前端開發中,模塊化是一種將代碼拆分為獨立模塊的開發方法。它通過將功能相似或相關的代碼組織成可復用、可維護的模塊,以提高開發效率和代碼質量。 模塊化的主要目的是解決傳統的JS開發存在的問題,例如全域命名沖突、代碼復用困難、依賴管理混亂等。通過模塊化,可以將代碼拆分為獨立的功能模塊,每個模塊都有自己的 ......

    uj5u.com 2023-05-18 08:34:40 more
  • 如何搭建一個vue專案

    (如何搭建一個vue專案) 一、nvm 安裝與使用 1.1、nvm簡介 nvm全名node.js version management,顧名思義是一個nodejs的版本管理工具。通過它可以安裝和切換不同版本的nodejs 1.2、nvm下載 ①github下載 https://github.com/ ......

    uj5u.com 2023-05-18 08:34:12 more
  • 非AI文生圖,獻丑了

    大家好,我是 DOM哥。給大家隆重介紹一個文生圖工具??,當然,并非 AI 的那個文生圖啦。只需要上傳一張圖片,再寫上填充的文案,就能生成一張由文字組成的圖片啦! ......

    uj5u.com 2023-05-18 08:33:26 more
  • 簡單聊兩句前端模塊化

    在前端開發中,模塊化是一種將代碼拆分為獨立模塊的開發方法。它通過將功能相似或相關的代碼組織成可復用、可維護的模塊,以提高開發效率和代碼質量。 模塊化的主要目的是解決傳統的JS開發存在的問題,例如全域命名沖突、代碼復用困難、依賴管理混亂等。通過模塊化,可以將代碼拆分為獨立的功能模塊,每個模塊都有自己的 ......

    uj5u.com 2023-05-18 08:33:11 more
  • ArcGIS如何自動獲得隨機采樣點?

    本文介紹基于ArcMap軟體,實作在指定區域自動生成隨機點的方法。 在GIS應用中,我們時常需要在研究區域內進行地理資料的隨機采樣;而采樣點的位置往往需要在結合實際情況的前提下,用計算機隨機生成。這一操作在ArcMap軟體中就可以非常方便地進行。 已知現有如下一景柵格影像,我們需要在這一影像對應的位 ......

    uj5u.com 2023-05-18 08:32:16 more
  • 第十九屆物聯網展上海站,成都億佰特邀您共享盛會

    IOTE 2023 19屆上海物聯網展 IOTE 2023第十九屆國際物聯網展·上海站(簡稱:IOTE上海物聯網展),2023年5月17-19日將在上海世博展覽館開展,匯聚全球超350+家參展企業、5萬+來自工業、物流、基礎建設、智慧城市、智慧零售領域的專業集成商、終端用戶參觀展會。 "新基建"為物 ......

    uj5u.com 2023-05-18 08:31:56 more
  • 第十九屆物聯網展上海站,成都億佰特邀您共享盛會

    IOTE 2023 19屆上海物聯網展 IOTE 2023第十九屆國際物聯網展·上海站(簡稱:IOTE上海物聯網展),2023年5月17-19日將在上海世博展覽館開展,匯聚全球超350+家參展企業、5萬+來自工業、物流、基礎建設、智慧城市、智慧零售領域的專業集成商、終端用戶參觀展會。 "新基建"為物 ......

    uj5u.com 2023-05-18 08:31:20 more
  • 學系統集成專案管理工程師(中項)系列01_法律法規

    招標投標法 1. 必須進行招標 1.1. 大型基礎設施、公用事業等關系社會公共利益、公眾安全的專案 1.2. 全部或者部分使用國有資金投資或者國家融資的專案 1.3. 使用國際組織或者外國政府貸款、援助資金的專案 1.4. 依法必須進行招標的專案,其招標投標活動不受地區或者部門的限制 1.5. 任何 ......

    uj5u.com 2023-05-18 08:30:59 more
  • ArcGIS如何自動獲得隨機采樣點?

    本文介紹基于ArcMap軟體,實作在指定區域自動生成隨機點的方法。 在GIS應用中,我們時常需要在研究區域內進行地理資料的隨機采樣;而采樣點的位置往往需要在結合實際情況的前提下,用計算機隨機生成。這一操作在ArcMap軟體中就可以非常方便地進行。 已知現有如下一景柵格影像,我們需要在這一影像對應的位 ......

    uj5u.com 2023-05-18 08:30:22 more