Vue之封裝一個Modal的Function

在業(yè)務(wù)中沐飘,我們經(jīng)常會遇到各種各樣的彈窗組件稳衬,一般我們都是直接將其封裝成一個組件瘟忱,通過v-model或者v-if之類的手段進(jìn)行控制, But 很容易就出現(xiàn)下面這種情況

<DetailModal v-model="detailVisible" />
<ConfirmModal v-model="confirmVisible" />
<BindModal v-model="bindVisible />

現(xiàn)上述這種情況香缺,我們需要同時維護(hù)多個彈窗的隱藏顯示手销,然后要寫很多個 toggle BalaBala。 于是乎图张, 我們可以看到很多UI框架的封裝Modal都提供了函數(shù)調(diào)用的形式锋拖,直接通過函數(shù)就可以控制彈窗。

this.$Modal.confirm({
  content:  '詳情彈窗‘
})

上述的方式祸轮,我們可以更加簡潔地維護(hù)彈窗狀態(tài)兽埃,而不用去同時維護(hù)對應(yīng)的html和狀態(tài),簡單看下下面的sample

import Vue, { CreateElement } from "vue";
import { Button } from "view-design";

let Instance!: any;

export default function deleteModal(props: any) {
  if (!Instance) {
    Instance = new Vue({
      data() {
        return {
          visible: false,
          onOk: () => {},
          loading: false,
          title: ""
        };
      },
      methods: {
        show(options: any) {
          Instance.visible = true;
          Instance.onOk = options.onOk;
          Instance.loading = options.loading;
          Instance.title = options.title;
          Instance.content = options.content;
        }
      },
      render(this: any, h: CreateElement) {
        const okButton = (scope: any) =>
          h(
            Button,
            {
              props: {
                type: "error",
                ghost: true,
                loading: this.loading
              },
              slot: "ok",
              on: {
                click: () => {
                  this.onOk(scope.close);
                }
              }
            },
            ["刪除"]
          );
        return h(
          "Modal",
          {
            props: {
              ...props,
              content: [],
              title: this.title,
              value: this.visible
            },
            on: {
              input: (status: boolean) => {
                this.visible = status;
              }
            },
            scopedSlots: {
              ok: okButton
            }
          },
          [this.content]
        );
      }
    });

    const component = Instance.$mount();
    document.body.appendChild(component.$el);
    const modal = Instance.$children[0];
  }

  Instance.show(props);
  return Instance;
}

上述的Sample的場景是刪除提示的按鈕, 通過 deleteModal的方式我們就可以調(diào)用起對應(yīng)的窗口, 而不需要在父組件中定義相關(guān)的彈窗組件,
其主要原因是通過Vue.$mount獲取到對應(yīng)組件的dom元素,直接掛載到docume.body上, 通過控制實例來執(zhí)行相關(guān)的操作, 但以上的代碼還有很多需要改進(jìn)的地方,

待續(xù)...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末适袜,一起剝皮案震驚了整個濱河市柄错,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苦酱,老刑警劉巖售貌,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疫萤,居然都是意外死亡颂跨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門给僵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毫捣,“玉大人详拙,你說我怎么就攤上這事÷” “怎么了饶辙?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斑粱。 經(jīng)常有香客問我弃揽,道長,這世上最難降的妖魔是什么则北? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任矿微,我火速辦了婚禮,結(jié)果婚禮上尚揣,老公的妹妹穿的比我還像新娘涌矢。我一直安慰自己,他們只是感情好快骗,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布娜庇。 她就那樣靜靜地躺著,像睡著了一般方篮。 火紅的嫁衣襯著肌膚如雪名秀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天藕溅,我揣著相機與錄音匕得,去河邊找鬼。 笑死巾表,一個胖子當(dāng)著我的面吹牛汁掠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播攒发,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼调塌,長吁一口氣:“原來是場噩夢啊……” “哼晋南!你這毒婦竟也來了惠猿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤负间,失蹤者是張志新(化名)和其女友劉穎偶妖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體政溃,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡趾访,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了董虱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扼鞋。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡申鱼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出云头,到底是詐尸還是另有隱情捐友,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布溃槐,位于F島的核電站匣砖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昏滴。R本人自食惡果不足惜猴鲫,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谣殊。 院中可真熱鬧拂共,春花似錦、人聲如沸姻几。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲜棠。三九已至肌厨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豁陆,已是汗流浹背柑爸。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盒音,地道東北人表鳍。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像祥诽,于是被迫代替她去往敵國和親譬圣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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