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

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

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

前言

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

1. 彈出框組件封裝

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

// 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. 自定義彈出框配置

接下來(lái),我們定義了一個(gè)名為 portPop 的自定義彈出框配置。這個(gè)配置使用了前面封裝的通用方法,同時(shí)為彈出框提供了一些特定的配置。以下是簡(jiǎn)要代碼:

// 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. 彈出框組件實(shí)現(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>

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

<template>
  <div>
    <Dialog :title="props.title" v-model="dialog" width="920px">
        <!-- ... 彈出框內(nèi)容 ... -->
        <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. 使用自定義彈出框組件

最終,我們可以在需要調(diào)用彈出框的地方,簡(jiǎn)單地執(zhí)行portPop方法,并傳遞相應(yīng)的配置和回調(diào)函數(shù)。這樣,彈出框就會(huì)顯示出來(lái),用戶可以與之交互。

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

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

文件結(jié)構(gòu)示例

組定義組件文件示例

效果:

總結(jié) 

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

相關(guān)文章

  • VUE學(xué)習(xí)寶典之vue-dialog使用方法

    VUE學(xué)習(xí)寶典之vue-dialog使用方法

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

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

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

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

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

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

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

    關(guān)于Vue父子組件傳參和回調(diào)函數(shù)的使用

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

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

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

    vue項(xiàng)目在線上服務(wù)器訪問(wèn)失敗原因分析

    這篇文章主要介紹了vue項(xiàng)目在線上服務(wù)器訪問(wèn)失敗原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue3中的 $attrs 與 Attributes 繼承

    vue3中的 $attrs 與 Attributes 繼承

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

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

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

    Vue使用el-input自動(dòng)獲取焦點(diǎn)和二次獲取焦點(diǎn)問(wèn)題及解決

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

最新評(píng)論

循化| 西充县| 电白县| 隆安县| 垦利县| 赣州市| 固阳县| 平罗县| 桃园县| 平遥县| 镇坪县| 磴口县| 曲麻莱县| 墨玉县| 乌兰察布市| 云梦县| 武宣县| 屏东市| 静乐县| 康乐县| 苗栗市| 招远市| 灵台县| 漠河县| 叙永县| 承德县| 荆州市| 庆安县| 应用必备| 托里县| 抚松县| 邵阳县| 和田市| 磐石市| 横峰县| 乡城县| 汉阴县| 琼中| 宝清县| 南投县| 乳源|