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

Vue2+Elementui?Dialog實現(xiàn)封裝自定義彈窗組件

 更新時間:2023年12月12日 15:59:19   作者:諸君且看兌子  
在日常的管理系統(tǒng)界面中,我們寫的最多的除了列表表格之外,就是各種彈窗組件,本文就來為大家詳細介紹一下Vue2如何結(jié)合Elementui?Dialog實現(xiàn)封裝自定義彈窗組件,希望對大家有所幫助

前言

在日常的管理系統(tǒng)界面中,我們寫的最多的除了列表表格之外,就是各種彈窗組件,如果將彈窗組件寫在上下文的話,每個頁面都需要編寫大量重復(fù)的dialog代碼已經(jīng)頻繁的創(chuàng)建控制顯示隱藏的變量信息,即使將彈窗內(nèi)展示信息抽取為組件,但是依舊有多個顯隱變量需要操控,可想而知一個單頁面文件會有多么龐大!??!

所以,我們可以將常用的彈窗組件封裝后進行函數(shù)式調(diào)用,函數(shù)式調(diào)用的好處有以下幾點

無需全局加載,需要使用的地方引入方法即可

無需定義顯示隱藏變量,關(guān)閉組件時會自動銷毀組件

無需擔心數(shù)據(jù)留存銷毀問題,關(guān)閉時會隨組件一起銷毀

單頁面文件代碼量下降,只需引入組件并在彈窗組件使用即可

更多優(yōu)點繼續(xù)探索中...

效果預(yù)覽

技術(shù)實現(xiàn)

定義彈窗組件文件夾,如果想要使用ts,請關(guān)注vue3自定義彈窗

  • Dialog
  • dialog.js
  • component.vue

定義component.vue,在編寫時,曾考慮是使用slot插槽還是使用component組件,有這么一段話供各位參考

Vue.js 是一款流行的 JavaScript 框架,它提供了多種方式來組織和構(gòu)建您的應(yīng)用程序。其中兩個主要的方式是使用插槽(slots)和組件(components)。

插槽是 Vue.js 中一種非常強大的功能,它允許您在父組件中預(yù)留一些位置,然后在子組件中填充內(nèi)容。這種方式可以很方便地實現(xiàn)動態(tài)組件和復(fù)雜布局。

組件是 Vue.js 中另一個核心概念,它允許您將應(yīng)用程序拆分為更小、更易于維護的部分。組件是自包含的,可以擁有自己的狀態(tài)、方法和生命周期鉤子。

在選擇使用插槽還是組件時,需要根據(jù)您的具體需求來決定。如果您的應(yīng)用程序需要動態(tài)布局和靈活性,那么插槽可能是更好的選擇。如果您的應(yīng)用程序需要更好的可維護性和可復(fù)用性,那么組件可能是更好的選擇。

所以最后還是考慮使用component編寫,不為別的,就是好玩

<!-- el-dialog為elementui 2.5版本的組件,尚無拖拽彈窗功能,如需在vue2中添加拖拽功能,可以查看其他文檔 -->
<!-- 測試后,此處el-dialog可以替換為antd或其他UI庫dialog彈窗,同時也可以自己編寫彈窗樣式,皆可以滿足調(diào)用 -->
<template>
    <el-dialog  append-to-body :title="title" :visible.sync="visible" v-bind="dialogOption">
    <!-- props傳入到組件內(nèi)數(shù)據(jù),接受即可 -->
        <component :is="component" v-bind="props" @cancel="cancel" @confirm="confirm"></component>
    </el-dialog>
</template>
let resolve = null
export default {
    data() {
        return {
            props: {},
            title: '',
            dialogOption: {},
            component: null,
            visible: true,
            onClose: () => { },
        }
    },
    methods: {
    //還可以更加精簡,但是目前為了方便易懂,先如此處理
        open({ title, dialogOption, component, props, onClose }) {
            this.title = title
            this.dialogOption = dialogOption
            this.component = component
            this.props = props
            this.visible = true
            this.onClose = onClose
            //異步處理相關(guān)邏輯,未來可用
            return new Promise((resolse, reject) => {
                resolve = resolse
            })
        },
        confirm(arg) {
            this.close()
            resolve(arg)
        },
        cancel() {
            this.close()
            resolve()
        },
        close() {
            //調(diào)用回調(diào)close,回傳傳入的close方法,銷毀組件
            this.visible = false
            this.$emit('close')
        }
    },
};

定義好組件后,需要定義調(diào)用組件的dialog.js方法

import Component from './component.vue'
import Vue from 'vue'

//定義調(diào)用類
class Dialog {
    //定義相關(guān)實例,每次new Dialog的時候都會創(chuàng)建一個新的實例,這樣彈窗之間就不會相互影響
    instance = null;
    component = null

    open(option) {
        //創(chuàng)建Vue實例,傳入相關(guān)參數(shù)信息
        this.instance = new Vue({
            render(h) {
                return h(Component, { title: option.title }, option.chidren)
            }
        })
        //調(diào)用實例的$mount()掛載組件
        this.component = this.instance.$mount();
        document.body.appendChild(this.component.$el);
        const notification = this.instance.$children[0];
        return notification.open(option);
    }
    close() {
        //傳入的銷毀方法,直接在dom樹上將當前組件直接銷毀
        if (this.component) {
            document.body.removeChild(this.component.$el)
        }
        this.component = null
    }
}
export default Dialog

具體實現(xiàn)時,在使用彈窗的界面導(dǎo)入函數(shù)式彈窗組件及封裝的數(shù)據(jù)展示彈窗,將有關(guān)參數(shù)傳入即可

<template>
<div>
    <p><el-button type="primary" @click="dialogDynamticFunc">測試按鈕</el-button></p>
</div>
</template>

<script>
//引入封裝組件及全局彈窗組件
import ChildComponent from './ChildComponent.vue'
import Dialog from './Dialog/dialog'

export default{
    methods:{
        dialogDynamticFunc() {
            let vueIns = this
            //new一個全局類
            let win = new Dialog()
            //調(diào)用open方法,傳入相關(guān)參數(shù)
            win.open({
                 title: '選擇用戶',
                 dialogOption: { width: '600px' },
                 component: ChildComponent,
                 props: {
                            id: 1
                        },
                //定義回調(diào)關(guān)閉函數(shù),
                 onClose: () => {
                 win.close()
             }
            })
            }
    }
}
</script>

以上就是Vue2+Elementui Dialog實現(xiàn)封裝自定義彈窗組件的詳細內(nèi)容,更多關(guān)于Vue自定義彈窗的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue.js前端框架之事件處理小結(jié)

    Vue.js前端框架之事件處理小結(jié)

    這篇文章主要介紹了Vue.js前端框架之事件處理小結(jié),本文給大家介紹了v-on 指令的基本用法,通過實例講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • vue項目中的webpack-dev-sever配置方法

    vue項目中的webpack-dev-sever配置方法

    下面小編就為大家分享一篇vue項目中的webpack-dev-sever配置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • ant design vue 表格table 默認勾選幾項的操作

    ant design vue 表格table 默認勾選幾項的操作

    這篇文章主要介紹了ant design vue 表格table 默認勾選幾項的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue實現(xiàn)登錄時圖形驗證碼

    vue實現(xiàn)登錄時圖形驗證碼

    這篇文章主要為大家詳細介紹了vue實現(xiàn)登錄時圖形驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue實現(xiàn)PopupWindow組件詳解

    Vue實現(xiàn)PopupWindow組件詳解

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)PopupWindow組件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • vue自定v-model實現(xiàn)表單數(shù)據(jù)雙向綁定問題

    vue自定v-model實現(xiàn)表單數(shù)據(jù)雙向綁定問題

    vue.js的一大功能便是實現(xiàn)數(shù)據(jù)的雙向綁定。這篇文章主要介紹了vue自定v-model實現(xiàn) 表單數(shù)據(jù)雙向綁定的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • 解決vue bus.$emit觸發(fā)第一次$on監(jiān)聽不到問題

    解決vue bus.$emit觸發(fā)第一次$on監(jiān)聽不到問題

    這篇文章主要介紹了解決vue bus.$emit觸發(fā)第一次$on監(jiān)聽不到問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue3學(xué)習(xí)筆記之自定義組件舉例

    vue3學(xué)習(xí)筆記之自定義組件舉例

    這篇文章主要給大家介紹了關(guān)于vue3學(xué)習(xí)筆記之自定義組件的相關(guān)資料,組件系統(tǒng)是Vue.js其中一個重要的概念,它提供了一種抽象,讓我們可以使用獨立可復(fù)用的小組件來構(gòu)建大型應(yīng)用,需要的朋友可以參考下
    2023-08-08
  • vue實現(xiàn)五子棋游戲

    vue實現(xiàn)五子棋游戲

    這篇文章主要為大家詳細介紹了vue實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 一文詳解如何解決Vue2前端項目無法訪問本地資源問題

    一文詳解如何解決Vue2前端項目無法訪問本地資源問題

    最近遇到不少同學(xué)反饋,Vue2 項目能 npm run serve 啟動,但頁面一直轉(zhuǎn)圈,某個 chunk.js 加載不到(pending),本文我們就來看看具體解決方法吧
    2025-09-09

最新評論

克拉玛依市| 讷河市| 吉林省| 浏阳市| 宝应县| 鄂尔多斯市| 山丹县| 五华县| 天等县| 北川| 玉树县| 丹棱县| 汝州市| 石棉县| 喀喇| 东山县| 达尔| 楚雄市| 赣榆县| 监利县| 涟源市| 荆州市| 盱眙县| 黄梅县| 靖宇县| 和平区| 广宗县| 湖口县| 鄂伦春自治旗| 平安县| 寿光市| 和顺县| 张家界市| 颍上县| 玉田县| 甘洛县| 河津市| 铜山县| 星子县| 射洪县| 许昌市|