Vue | 如何封裝一個(gè)toast插件

插件也是組件化的一部分把篓。今天來(lái)寫一個(gè) toast 插件单旁。

什么是插件?其實(shí) vue-router 就是 Vue 的一個(gè)插件巍沙,插件通常用來(lái)為 Vue 添加全局功能葵姥。

今天的 toast 就是一個(gè)全局要使用的功能,比如用戶下單時(shí)對(duì)用戶進(jìn)行提示句携,或者在用戶刪除操作時(shí)對(duì)用戶進(jìn)行提示榔幸。

這個(gè) toast 的功能點(diǎn)是

  • 顯示特定信息
  • 在特定時(shí)間內(nèi)銷毀
demwwo.gif

當(dāng)然可以使用組件化的思想封裝一個(gè)toast組件。
比如像這樣 Vue 組件 | 如何從零封裝一個(gè)tabbar組件矮嫉,從這里我們可以知道流程是下面的樣子削咆。

  • 編寫組件
  • 導(dǎo)入組件
  • 將值傳給組件
  • 注冊(cè)組件
  • 使用組件
分散

這種方式一是步驟多,二是使用組件時(shí)代碼分散蠢笋,代碼要寫在文件的不同部分拨齐。使用時(shí)有點(diǎn)麻煩。要照顧數(shù)據(jù)和 DOM昨寞,有沒(méi)有可能只關(guān)注數(shù)據(jù)瞻惋,這里是要展示的信息和展示的時(shí)間。

使用過(guò) vue-router 的编矾,可以知道 vue-router 可以這樣使用:

this.$router.push('/detail/' + this.goodsItem.iid)

如果我們可以這樣使用 toast 就好了:

this.$toast.show('toast 加載成功' , 2000)

那么重點(diǎn)來(lái)了,搞一個(gè)插件的流程是什么馁害?

首先窄俏,明確一點(diǎn)我們先將 DOM 搞出來(lái),一個(gè)居中的框碘菜,里面有提示文字凹蜈,不妨寫在一個(gè) Vue 文件中。

<!-- Toast.vue -->

<template>
  <div class="toast" v-show="isShow">
    <div>{{message}}</div>
  </div>
</template>

<style scoped>
/* fixed 居中 */
.toast {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 8px 10px;
  color: aliceblue;

  z-index: 9999;

  background-color: rgba(0, 0, 0, 0.75);
}
</style>

下面是功能代碼忍啸,一定時(shí)間消失仰坦,可以使用setTimeout()并設(shè)置默認(rèn)事件2000毫秒。

<!-- Toast.vue -->
<script>
export default {
  name: "Toast",
  data() {
    return {
      message: "",
      isShow: false
    };
  },
  methods: {
    show(message, duration = 2000) {
      this.isShow = true;
      this.message = message;

      setTimeout(() => {
        this.isShow = false;
        this.message = "";
      }, duration);
    }
  }
};
</script>

第一步創(chuàng)建組件成功计雌,和組件化創(chuàng)建區(qū)別不大悄晃。


下面進(jìn)入第二步,一開(kāi)始就將 toast 組件的 模板 掛到 DOM 中,這樣我們?cè)谑褂貌寮r(shí)就不用管 DOM 了妈橄,也就是省了將標(biāo)簽寫到 template 中的步驟庶近,也是和組件化不同的重要一點(diǎn)。

// index.js
import Toast from './Toast'

const obj = {}

obj.install = function (Vue) {
  console.log('toast install')
  // 1.創(chuàng)建組件構(gòu)造器
  const toastContrustor = Vue.extend(Toast)
  // 2.new眷蚓,根據(jù)組件構(gòu)造器鼻种,創(chuàng)建一個(gè)組件對(duì)象
  const toast = new toastContrustor()
  // 3.將組件對(duì)象掛載到元素上
  toast.$mount(document.createElement('div'))
  // 4.toast.$el對(duì)應(yīng)的是div
  document.body.appendChild(toast.$el)

  Vue.prototype.$toast = toast
}

export default obj

到 main.js 中全局安裝 toast 插件。

// main.js
import toast from 'components/common/toast'
// 安裝toast插件
Vue.use(toast)

使用沙热,隨便使用:

this.$toast.show('toast 加載成功' , 2000)
this.$toast.show('cemcoe' , 4000)

這樣使用起來(lái)就簡(jiǎn)單了叉钥。我們要使用相應(yīng)功能時(shí)只用一句就搞定了,和組件化相比確實(shí)簡(jiǎn)潔了很多篙贸。

插件的使用場(chǎng)景是DOM樣式變化不大的投队,并且會(huì)頻繁使用的地方∏革‘

當(dāng)我們要實(shí)現(xiàn)輕提示功能時(shí)蛾洛,只需傳入要傳入的展示信息和展示時(shí)間就好了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雁芙,一起剝皮案震驚了整個(gè)濱河市轧膘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兔甘,老刑警劉巖谎碍,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異洞焙,居然都是意外死亡蟆淀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門澡匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)熔任,“玉大人,你說(shuō)我怎么就攤上這事唁情∫商Γ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵甸鸟,是天一觀的道長(zhǎng)惦费。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抢韭,這世上最難降的妖魔是什么薪贫? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮刻恭,結(jié)果婚禮上瞧省,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好臀突,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布勉抓。 她就那樣靜靜地躺著,像睡著了一般候学。 火紅的嫁衣襯著肌膚如雪藕筋。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天梳码,我揣著相機(jī)與錄音隐圾,去河邊找鬼。 笑死掰茶,一個(gè)胖子當(dāng)著我的面吹牛暇藏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播濒蒋,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盐碱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了沪伙?” 一聲冷哼從身側(cè)響起瓮顽,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎围橡,沒(méi)想到半個(gè)月后暖混,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翁授,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年拣播,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片收擦。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贮配,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塞赂,到底是詐尸還是另有隱情泪勒,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布减途,位于F島的核電站酣藻,受9級(jí)特大地震影響曹洽,放射性物質(zhì)發(fā)生泄漏鳍置。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一送淆、第九天 我趴在偏房一處隱蔽的房頂上張望税产。 院中可真熱鬧,春花似錦、人聲如沸辟拷。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)衫冻。三九已至诀紊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間隅俘,已是汗流浹背邻奠。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留为居,地道東北人碌宴。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蒙畴,于是被迫代替她去往敵國(guó)和親贰镣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345