vue3 全局封裝element-plus 的dialog

在對公司舊項(xiàng)目升級的時候嗦随,有一些vue2的代碼對使用全局彈窗是通過this.$dialog(xxx)這種方式進(jìn)行使用也榄,那么今天我就介紹一些二次封裝element-plus的dialog沥潭。不廢話直接上代碼夹厌。
src/components/Dialog/index.js

import Dialog from "./Dialog.vue";
import { h, render } from "vue";

let createMount = (opts) => {
  const mountNode = document.createElement("div");
  document.body.appendChild(mountNode);
  const vnode = h(Dialog, {
    ...opts,
    modelValue: true,
    remove() {
      document.body.removeChild(mountNode);
    },
  });
  vnode.appContext = Modal._context;
  render(vnode, mountNode);
};
const Modal = {
  install(app, options) {
    app.config.globalProperties.$dialog2 = {
      show: (title, component, options = {}, params) => {
        options.id = options.id || "v3popup_" + 1; //唯一id 刪除組件時用于定位
        createMount({
          title,
          comps: component,
        });
      },
    };
  },
  _context: null,
};
export default Modal;

src/components/Dialog/Dialog.vue

<template>
  <el-dialog
    custom-class="subDialog"
    :title="title"
    v-model="dialogPopVisible"
    :width="width"
    :before-close="onBeforeClose"
    :center="true"
    v-bind="option"
  >
    <div><component :is="comps"></component></div>
  </el-dialog>
</template>

<script>
import { ElDialog } from "element-plus";
export default {
  data() {
    return {
      dialogPopVisible: true,
    };
  },
  components: { ElDialog },
  props: {
    title: {
      type: String,
      default: "",
    },
    width: {
      type: String,
      default: "550px",
    },
    option: {
      type: Object,
      default: () => {},
    },
    remove: {
      type: Function,
    },
    comps: {
      require: false,
    },
  },
  methods: {
    onBeforeClose(done) {
      done();
    },
  },
  watch: {
    dialogPopVisible(value) {
      if (!value) {
        this.remove();
      }
    },
  },
};
</script>

<style lang="scss">
.subDialog {
  &.el-dialog {
    z-index: 99;
    background-color: #ffffff;
    margin-top: 20% !important;
  }
  .el-dialog__header {
    width: 100%;
    height: 50px;
    line-height: 50px;
    box-sizing: border-box;
    padding: 0 25px;
    text-align: left;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);
  }
  .el-dialog__headerbtn {
    font-size: 20px;
    width: 40px;
    height: 40px;
  }
  .el-dialog__title {
    font-size: 18px;
    font-family: PingFangSC-Medium, PingFang SC;
    font-weight: 500;
    color: rgba(0, 0, 0, 0.85);
  }
  .el-dialog__body {
    box-sizing: border-box;
    padding: 20px 25px;
  }
  .el-dialog__footer {
    text-align: right;
    height: 60px;
    line-height: 60px;
    padding: 0;
    margin-right: 20px;
    border-top: 1px solid rgba(0, 0, 0, 0.06);
  }
}
</style>

src/main.js

import { createApp } from "vue";
import App from "./App.vue";

import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import MDialog from "@/components/Dialog";

const app = createApp(App);

//注意這是重點(diǎn)
MDialog._context = app._context;
app.use(ElementPlus);
app.use(MDialog);
app.mount("#app");

然后就可以正常使用了肺稀,可以傳遞組件進(jìn)來


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赘艳,一起剝皮案震驚了整個濱河市挽拔,隨后出現(xiàn)的幾起案子辆脸,更是在濱河造成了極大的恐慌,老刑警劉巖螃诅,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啡氢,死亡現(xiàn)場離奇詭異状囱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)倘是,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門亭枷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搀崭,你說我怎么就攤上這事叨粘。” “怎么了瘤睹?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵升敲,是天一觀的道長。 經(jīng)常有香客問我默蚌,道長冻晤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任绸吸,我火速辦了婚禮鼻弧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锦茁。我一直安慰自己攘轩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布码俩。 她就那樣靜靜地躺著度帮,像睡著了一般稿存。 火紅的嫁衣襯著肌膚如雪笨篷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天瓣履,我揣著相機(jī)與錄音率翅,去河邊找鬼。 笑死袖迎,一個胖子當(dāng)著我的面吹牛冕臭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燕锥,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辜贵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了归形?” 一聲冷哼從身側(cè)響起托慨,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎连霉,沒想到半個月后榴芳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗡靡,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年窟感,在試婚紗的時候發(fā)現(xiàn)自己被綠了讨彼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡柿祈,死狀恐怖哈误,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躏嚎,我是刑警寧澤蜜自,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站卢佣,受9級特大地震影響重荠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虚茶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一戈鲁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘹叫,春花似錦婆殿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喂饥,卻和暖如春消约,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背员帮。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工荆陆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人集侯。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像帜消,于是被迫代替她去往敵國和親棠枉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容