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

基于vue框架手寫一個notify插件實現(xiàn)通知功能的方法

 更新時間:2019年03月31日 11:40:40   作者:唐吉sir  
這篇文章主要介紹了基于vue框架手寫一個notify插件實現(xiàn)通知功能的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

簡單編寫一個vue插件,當(dāng)點擊時觸發(fā)notify插件,dom中出現(xiàn)相應(yīng)內(nèi)容并且在相應(yīng)時間之后清除,我們可以在根組件中設(shè)定通知內(nèi)容和延遲消失時間。

1. 基礎(chǔ)知識

我們首先初始化一個vue項目,刪除不需要的組件和樣式,主要針對src下一些初始化資源,有過vue項目基礎(chǔ)的應(yīng)該很容易理解,如果沒有vue基礎(chǔ)建議先熟悉每個初始化文件的作用。

關(guān)于vue中如何開發(fā)插件可以直接看vue官方文檔,簡單了解插件開發(fā)過程,vue插件文檔

現(xiàn)在我們在src目錄下新建一個plugin文件夾,里面存放要開發(fā)的插件notify.js

// notify.js
let notify = {  //需要在此對象擁有一個install 方法

};
notify.install = function () {
  alert('tangj')
}
// 導(dǎo)出這個對象,如果使用Vue.use()就會自動調(diào)用install方法
export default notify;

然后在main函數(shù)導(dǎo)入這個模塊并使用

import notify from './plugin/notify.js'
Vue.use(notify)

運行這個vue項目可以看到,頁面開始加載有一個彈出框,說明我們創(chuàng)建的插件調(diào)用成功

2. notify.js主要功能

上面我們知道了,Vue.use()會自動調(diào)用install方法,install第一個參數(shù)為Vue構(gòu)造函數(shù),第二個參數(shù)即為輸入的內(nèi)容,默認undefined,所以我們在調(diào)用一開始的時候為Vue這個構(gòu)造函數(shù)的原型上添加一個$notify方法,此后,每一個Vue的實例都能調(diào)用這個方法,這樣我們就可以通過給根組件綁定一個點擊事件,讓$notify執(zhí)行。

當(dāng)然這樣還是不夠的,回到開頭說的,根組件可以設(shè)定通知內(nèi)容和通知延遲時間,相當(dāng)于給this.$notify傳遞兩個參數(shù),第一個是通知內(nèi)容,第二個是延遲時間。

因此,原型上的notify函數(shù)還得接受兩個參數(shù),當(dāng)有通知內(nèi)容把通知內(nèi)容替代,有延遲時間把延遲時間替代,為了插件的完整性,記得要給參數(shù)設(shè)定默認值。

總結(jié)一下業(yè)務(wù)邏輯:點擊頁面需要出現(xiàn)一個通知內(nèi)容,經(jīng)過延遲時間后消失,所以我們可以導(dǎo)入一個模塊,并把這個模塊掛載到頁面上,經(jīng)過相應(yīng)的延遲時間后移除

import modal from './notify.vue'
let notify = {  //需要在此對象擁有一個install 方法

};
notify.install = function (Vue,options={delay:3000}) {    
  Vue.prototype.$notify = function (message,opt={}) {
    options = {...options,...opt}; //用自己調(diào)用插件時傳遞過來的屬性覆蓋默認設(shè)置的值
    let v = Vue.extend(modal); //返回的是一個構(gòu)造函數(shù)的子類,參數(shù)是包含組件選項的對象
    let vm = new v;
    let oDiv = document.createElement('div'); //創(chuàng)建一個div將實例掛載到元素上
    vm.$mount(oDiv);
    vm.value = message;
    document.body.appendChild(vm.$el);
    setTimeout(()=>{ //根據(jù)delay將dom元素移除
      document.body.removeChild(vm.$el);
    },options.delay) 
  }
}
// 導(dǎo)出這個對象,如果使用Vue.use()就會自動調(diào)用install方法
export default notify;

3. 完善notify.js

現(xiàn)在還有一個問題,我們不斷點擊的時候,會通知很多個組件,這顯然不符合預(yù)期


解決的辦法很簡單,我們只要在執(zhí)行之前判斷是否已經(jīng)存在了這個實例,如果存在直接返回不再繼續(xù),如果不存在,那么執(zhí)行往后的邏輯

notify.install = function (Vue,options={delay:3000}) {    
  Vue.prototype.$notify = function (message,opt={}) {
    if(notify.el)return;//判斷dom上是否存在這個實例
    options = {...options,...opt}; 
    let v = Vue.extend(modal); 
    let vm = new v;
    let oDiv = document.createElement('div'); 
    vm.$mount(oDiv);
    vm.value = message;
    document.body.appendChild(vm.$el);
    notify.el = vm.$el;   //把實例給notify對象    
    setTimeout(()=>{ 
      document.body.removeChild(vm.$el);
      notify.el = null; // 清空這個對象
    },options.delay) 
  }
}

最后

這是很簡單的一個vue插件寫法,我們可以用這種思維創(chuàng)造很多有用的插件,比如vue-router、vue-awesome-swiper等等,很大程度上提高了開發(fā)效率

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue3?ts編寫echart是tooltip無法展示的解決

    vue3?ts編寫echart是tooltip無法展示的解決

    這篇文章主要介紹了vue3?ts編寫echart是tooltip無法展示的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 如何實現(xiàn)vue的tree組件

    如何實現(xiàn)vue的tree組件

    這篇文章主要介紹了如何實現(xiàn)vue的tree組件,幫助大家更好的理解和學(xué)習(xí)vue框架,感興趣的朋友可以了解下
    2020-12-12
  • Vue3 axios配置以及cookie的使用方法實例演示

    Vue3 axios配置以及cookie的使用方法實例演示

    這篇文章主要介紹了Vue3 axios配置以及cookie的使用方法,需要的朋友可以參考下
    2023-02-02
  • vue動態(tài)添加表單validateField驗證功能實現(xiàn)

    vue動態(tài)添加表單validateField驗證功能實現(xiàn)

    這篇文章主要介紹了vue動態(tài)添加表單validateField驗證功能實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue如何判斷組件進入可視區(qū)域

    vue如何判斷組件進入可視區(qū)域

    這篇文章主要介紹了vue如何判斷組件進入可視區(qū)域問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue項目中使用天地圖的簡單代碼示例

    vue項目中使用天地圖的簡單代碼示例

    這篇文章主要給大家介紹了關(guān)于vue項目中使用天地圖的相關(guān)資料,在Vue.js項目中使用天地圖,首先需要申請apikey并在index.html中引入天地圖的js文件,然后創(chuàng)建一個div元素作為地圖容器,并通過CSS設(shè)置其樣式,需要的朋友可以參考下
    2024-11-11
  • VUE + OPENLAYERS實現(xiàn)實時定位功能

    VUE + OPENLAYERS實現(xiàn)實時定位功能

    本系列文章介紹一個簡單的實時定位示例,基于VUE + OPENLAYERS實現(xiàn)實時定位功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-09-09
  • 詳解vuex之store拆分即多模塊狀態(tài)管理(modules)篇

    詳解vuex之store拆分即多模塊狀態(tài)管理(modules)篇

    這篇文章主要介紹了詳解vuex之store拆分即多模塊狀態(tài)管理(modules)篇,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vxe-Table開發(fā)中的各種坑以及避坑指南

    Vxe-Table開發(fā)中的各種坑以及避坑指南

    vxe-table是一個全功能的Vue表格,滿足絕大部分對Table的一切需求,與任意組件庫完美兼容,下面這篇文章主要給大家介紹了關(guān)于Vxe-Table開發(fā)中各種坑以及避坑的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • vue項目首屏加載過慢的一些解決方案

    vue項目首屏加載過慢的一些解決方案

    最近碰到vue項目打包上線后,第一次打開首頁后會出現(xiàn)空白、加載時間過長的情況,下面這篇文章主要給大家介紹了關(guān)于vue項目首屏加載過慢的一些解決方案,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12

最新評論

凤凰县| 宿州市| 壶关县| 碌曲县| 松潘县| 花莲县| 寻乌县| 杭锦后旗| 廉江市| 留坝县| 福泉市| 镇沅| 阳城县| 淳安县| 阿拉善盟| 广饶县| 登封市| 咸丰县| 大名县| 天柱县| 台东市| 嘉峪关市| 雷山县| 娄烦县| 聂拉木县| 富顺县| 泾川县| 嘉兴市| 米易县| 江北区| 惠州市| 贵定县| 凤山县| 洪洞县| 广东省| 迁安市| 泗水县| 尉氏县| 遂昌县| 林甸县| 辽宁省|