最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何通過Vue3+Element?Plus自定義彈出框組件

 更新時間:2024年05月11日 10:24:31   作者:擺脫小白  
這篇文章主要給大家介紹了關于如何通過Vue3+Element?Plus自定義彈出框組件的相關資料,彈窗是前端開發(fā)中的一種常見需求,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

在Vue 3項目中,使用Element Plus構建彈出框是一項常見的任務。為了簡化這個過程,我們可以封裝一個公共組件,使彈出框的調用變得簡單而高效。本文將介紹如何通過Vue 3和Element Plus,使用一個自定義的彈出框組件實現(xiàn)這一目標。

1. 彈出框組件封裝

首先,我們封裝了一個通用的彈出框組件,具體實現(xiàn)位于 util.js 文件中。通過 initInstance 方法,我們可以動態(tài)創(chuàng)建一個彈出框實例,并將其掛載到指定的容器上。以下是簡要代碼:

// util.js

import { h, render } from 'vue';

export function initInstance(component, container, option) {
    const vNode = h(component, option);
    render(vNode, container);
    document.body.appendChild(container.firstElementChild);
    return vNode.component;
}

export function getContainer() {
    return document.createElement('div');
}

2. 自定義彈出框配置

接下來,我們定義了一個名為 portPop 的自定義彈出框配置。這個配置使用了前面封裝的通用方法,同時為彈出框提供了一些特定的配置。以下是簡要代碼:

// common.js

import { initInstance, getContainer } from "./util";
import PortPop from "../components/PortPop";

const instanceMap = new Map();

export const portPop = (option, call) => {
    const container = getContainer();
    let opt = {
        ...option,
        onComfrim: (data) => {
            call(data);
        },
        onVanish: () => {
            render(null, container);
            instanceMap.delete(vm);
        },
    };
    const component = initInstance(PortPop, container, opt);
    const vm = component.proxy;
    component.exposed.openDialog();
    instanceMap.set(vm, { option: opt });
};

3. 彈出框組件實現(xiàn)

首先,我們要先封裝一下el-dialog組件 

<template>
  <el-dialog
    :model-value="modelValue"
    :title="title"
    :width="width"
    :modal="modal"
    draggable
    destroy-on-close
    :close-on-click-modal="false"
    append-to-body
    :before-close="beforeClose"
    @close="dialogColse"
    @closed="dialogColsed"
  >
    <slot />
    <template #footer>
      <span class="dialog-footer">
        <slot name="footer" />
      </span>
    </template>
  </el-dialog>
</template>
<script setup name="Dialog">
import { ElDialog } from "element-plus";
const props = defineProps({
  modelValue: {
    type: [Boolean],
    default: false,
  },
  title: {
    type: [String],
    default: "",
  },
  width: {
    type: [String],
    default: "",
  },
  modal: {
    type: [Boolean],
    default: false,
  },
  beforeClose: [Function],
});
const emits = defineEmits(["update:modelValue", "onClosed", "closed"]);
function dialogColse() {
  emits("update:modelValue", false);
}
function dialogColsed() {
  emits("onClosed", false);
  emits("closed", false);
}
</script>

<style lang="scss">
</style>

最后,我們實現(xiàn)了具體的彈出框組件 PortPop,這個組件使用了 Element Plus 的 Dialog 組件,并在其中嵌套了一些其他組件,以實現(xiàn)特定的功能。以下是簡要代碼:

<template>
  <div>
    <Dialog :title="props.title" v-model="dialog" width="920px">
        <!-- ... 彈出框內容 ... -->
        <template #footer>
            <div class="dialog-footer">
              <el-button type="primary" size="small" @click="confrim">
                確定
              </el-button>
              <el-button @click="dialog = false" size="small">取消</el-button>
            </div>
          </template>
    </Dialog>
  </div>
</template>

<script setup lang="tsx">
import {
  nextTick,
  ref, useAttrs,
} from 'vue'
import Dialog from '@/components/dialog'
import {
  ElInput,
  ElButton,
} from 'element-plus'

const props = defineProps({
  title: {
    type: [String],
    default: '',
  },
  type: {
    type: [String],
    default: '',
  },
})

const emits = defineEmits(['comfrim'])
const attrs = useAttrs()
const dialog = ref(false)
function openDialog() {
  dialog.value = true
}
const confrim = async () => {
  emits('comfrim', "傳遞給父組件的數(shù)據(jù)")
  nextTick(() => {
    dialog.value = false
  })
}
defineExpose({ openDialog })

</script>
<style lang="scss">
</style>

4. 使用自定義彈出框組件

最終,我們可以在需要調用彈出框的地方,簡單地執(zhí)行portPop方法,并傳遞相應的配置和回調函數(shù)。這樣,彈出框就會顯示出來,用戶可以與之交互。

// 在需要的地方調用自定義彈出框
import { portPop } from "./customDialog";

// 示例調用
portPop({ title: '自定義彈出框', defaultKeyword: '關鍵字' }, (data) => {
    // 處理彈出框確認后的數(shù)據(jù)
    console.log('用戶選擇的數(shù)據(jù):', data);
});

文件結構示例

組定義組件文件示例

效果:

總結 

到此這篇關于如何通過Vue3+Element Plus自定義彈出框組件的文章就介紹到這了,更多相關Vue3 ElementPlus自定義彈出框組件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • VUE學習寶典之vue-dialog使用方法

    VUE學習寶典之vue-dialog使用方法

    在Vue中dialog對話框是一種常見的組件,用于在用戶與應用程序進行交互時顯示信息或收集輸入,這篇文章主要給大家介紹了關于VUE學習寶典之vue-dialog使用方法的相關資料,需要的朋友可以參考下
    2024-05-05
  • vue中v-for加載本地靜態(tài)圖片方法

    vue中v-for加載本地靜態(tài)圖片方法

    下面小編就為大家分享一篇vue中v-for加載本地靜態(tài)圖片方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 自帶氣泡提示的vue校驗插件(vue-verify-pop)

    自帶氣泡提示的vue校驗插件(vue-verify-pop)

    這篇文章主要為大家詳細介紹了自帶氣泡提示的vue校驗插件,vue-verify-pop的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • vue中展示、讀取.md?文件的方法(批量引入、自定義代碼塊高亮樣式)

    vue中展示、讀取.md?文件的方法(批量引入、自定義代碼塊高亮樣式)

    這篇文章主要介紹了vue中展示、讀取.md?文件的方法(批量引入、自定義代碼塊高亮樣式),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 關于Vue父子組件傳參和回調函數(shù)的使用

    關于Vue父子組件傳參和回調函數(shù)的使用

    這篇文章主要介紹了關于Vue父子組件傳參和回調函數(shù)的使用,我們將某段代碼封裝成一個組件,而這個組件又在另一個組件中引入,而引入該封裝的組件的文件叫做父組件,被引入的組件叫做子組件,需要的朋友可以參考下
    2023-05-05
  • vue.js云存儲實現(xiàn)圖片上傳功能

    vue.js云存儲實現(xiàn)圖片上傳功能

    示對象存儲是騰訊云提供的一種存儲海量文件的分布式存儲服務,本文主要介紹了用vue.js實現(xiàn)圖片上傳功能,感興趣的小伙伴們可以參考一下
    2021-05-05
  • vue項目在線上服務器訪問失敗原因分析

    vue項目在線上服務器訪問失敗原因分析

    這篇文章主要介紹了vue項目在線上服務器訪問失敗原因分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue3中的 $attrs 與 Attributes 繼承

    vue3中的 $attrs 與 Attributes 繼承

    這篇文章主要介紹了vue3中的 $attrs 與 Attributes 繼承的相關資料,首先介紹了什么是Attributes 繼承,結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 在UniApp中實現(xiàn)App與H5頁面的跳轉及通信的代碼示例

    在UniApp中實現(xiàn)App與H5頁面的跳轉及通信的代碼示例

    在移動應用開發(fā)中,內嵌 H5 頁面或與外部網(wǎng)頁交互是常見需求,UniApp 作為跨平臺框架,提供了靈活的方式實現(xiàn) App 與 H5 的跳轉和雙向通信,本文將詳細講解實現(xiàn)方法,并提供可直接復用的代碼示例,需要的朋友可以參考下
    2025-04-04
  • Vue使用el-input自動獲取焦點和二次獲取焦點問題及解決

    Vue使用el-input自動獲取焦點和二次獲取焦點問題及解決

    這篇文章主要介紹了Vue使用el-input自動獲取焦點和二次獲取焦點問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論

满城县| 肇东市| 林西县| 淳安县| 虎林市| 夹江县| 连城县| 会理县| SHOW| 胶南市| 米林县| 满城县| 龙游县| 乐安县| 汽车| 漳平市| 疏勒县| 青冈县| 宁安市| 淄博市| 漳州市| 延寿县| 郯城县| 蛟河市| 莱芜市| 封丘县| 广丰县| 旌德县| 乌拉特中旗| 郁南县| 枝江市| 新野县| 射阳县| 东城区| 新河县| 东乡族自治县| 墨竹工卡县| 海晏县| 章丘市| 伊金霍洛旗| 托克逊县|