diff --git a/dist/happy-bus.js b/dist/happy-bus.js index aacd762..24feb43 100644 --- a/dist/happy-bus.js +++ b/dist/happy-bus.js @@ -1,6 +1,6 @@ /*! name: vue-happy-bus - version: 1.0.1 + version: 1.0.3 author: tangdaohai@outlook.com github: https://github.com/tangdaohai/vue-happy-bus */ @@ -12,7 +12,7 @@ Vue$ = Vue$ && Vue$.hasOwnProperty('default') ? Vue$['default'] : Vue$; -var version = "1.0.1"; +var version = "1.0.3"; var Vue = Vue$; if (typeof window !== 'undefined' && window.Vue) { @@ -41,13 +41,13 @@ var destroyHandler = function destroyHandler() { var BusFactory = function BusFactory(vm) { // 当前调用组件的 destroyed 钩子 - var destroyed = vm.$options.destroyed; + var destroyed = vm.$options.destroyed || []; // 当前组件的唯一标示(vue生成的自增ID) var uid = vm._uid; // 初始化当前组件的事件集合对象 EventStore[uid] = {}; // 为当前组件挂载destroyed钩子 - !destroyed.includes(destroyHandler) && destroyed.push(destroyHandler); + !destroyed.includes(destroyHandler) && vm.$once('hook:destroyed', destroyHandler); return { $on: function $on(type, handler) { diff --git a/dist/happy-bus.js.map b/dist/happy-bus.js.map index 8dea03e..363ca60 100644 --- a/dist/happy-bus.js.map +++ b/dist/happy-bus.js.map @@ -1 +1 @@ -{"version":3,"file":"happy-bus.js","sources":["../index.js"],"sourcesContent":["import Vue$ from 'vue'\nimport { version } from './package.json'\nlet Vue = Vue$\nif (typeof window !== 'undefined' && window.Vue) {\n Vue = window.Vue\n}\n\n// 记录所有的事件类型与事件函数\nconst EventStore = {}\nconst Bus = new Vue()\n\n// 移除所有事件的方法\nconst destroyHandler = function () {\n // this 为调用此方法的vue组件\n const currentEventObj = EventStore[this._uid]\n if (typeof currentEventObj === 'undefined') {\n return\n }\n for (let type in currentEventObj) {\n const key = Array.isArray(type) ? type.join(',') : type\n // Bus 解绑事件\n Bus.$off(type, currentEventObj[key])\n }\n // 删除记录的事件集合\n delete EventStore[this._uid]\n}\n\nconst BusFactory = vm => {\n // 当前调用组件的 destroyed 钩子\n const destroyed = vm.$options.destroyed\n // 当前组件的唯一标示(vue生成的自增ID)\n const uid = vm._uid\n // 初始化当前组件的事件集合对象\n EventStore[uid] = {}\n // 为当前组件挂载destroyed钩子\n !destroyed.includes(destroyHandler) && destroyed.push(destroyHandler)\n\n return {\n $on: (type, handler) => {\n const key = Array.isArray(type) ? type.join(',') : type\n EventStore[uid][key] = handler\n Bus.$on(type, handler)\n },\n $off: (type, handler) => {\n // $off() 时 type 为空,移除所有事件\n if (!type) {\n // 删除该uid下事件集合\n delete EventStore[uid]\n Bus.$off()\n return\n }\n const key = Array.isArray(type) ? type.join(',') : type\n // 删除对应的事件\n delete EventStore[uid][key]\n Bus.$off(type, handler)\n },\n $once: (...params) => Bus.$once(...params),\n $emit: (...params) => Bus.$emit(...params)\n }\n}\n\nBusFactory.$emit = (...params) => Bus.$emit(...params)\nBusFactory.$once = (...params) => Bus.$once(...params)\n\nexport default BusFactory\nexport { Bus, version }\n"],"names":["Vue","Vue$","window","EventStore","Bus","destroyHandler","currentEventObj","_uid","type","key","Array","isArray","join","$off","BusFactory","destroyed","vm","$options","uid","includes","push","handler","$on","$once","$emit"],"mappings":";;;;;;;;;;;;;;;;AAEA,IAAIA,MAAMC,IAAV;AACA,IAAI,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,OAAOF,GAA5C,EAAiD;QACzCE,OAAOF,GAAb;;;;AAIF,IAAMG,aAAa,EAAnB;AACA,IAAMC,MAAM,IAAIJ,GAAJ,EAAZ;;;AAGA,IAAMK,iBAAiB,SAAjBA,cAAiB,GAAY;;MAE3BC,kBAAkBH,WAAW,KAAKI,IAAhB,CAAxB;MACI,OAAOD,eAAP,KAA2B,WAA/B,EAA4C;;;OAGvC,IAAIE,IAAT,IAAiBF,eAAjB,EAAkC;QAC1BG,MAAMC,MAAMC,OAAN,CAAcH,IAAd,IAAsBA,KAAKI,IAAL,CAAU,GAAV,CAAtB,GAAuCJ,IAAnD;;QAEIK,IAAJ,CAASL,IAAT,EAAeF,gBAAgBG,GAAhB,CAAf;;;SAGKN,WAAW,KAAKI,IAAhB,CAAP;CAZF;;AAeA,IAAMO,aAAa,SAAbA,UAAa,KAAM;;MAEjBC,YAAYC,GAAGC,QAAH,CAAYF,SAA9B;;MAEMG,MAAMF,GAAGT,IAAf;;aAEWW,GAAX,IAAkB,EAAlB;;GAECH,UAAUI,QAAV,CAAmBd,cAAnB,CAAD,IAAuCU,UAAUK,IAAV,CAAef,cAAf,CAAvC;;SAEO;SACA,aAACG,IAAD,EAAOa,OAAP,EAAmB;UAChBZ,MAAMC,MAAMC,OAAN,CAAcH,IAAd,IAAsBA,KAAKI,IAAL,CAAU,GAAV,CAAtB,GAAuCJ,IAAnD;iBACWU,GAAX,EAAgBT,GAAhB,IAAuBY,OAAvB;UACIC,GAAJ,CAAQd,IAAR,EAAca,OAAd;KAJG;UAMC,cAACb,IAAD,EAAOa,OAAP,EAAmB;;UAEnB,CAACb,IAAL,EAAW;;eAEFL,WAAWe,GAAX,CAAP;YACIL,IAAJ;;;UAGIJ,MAAMC,MAAMC,OAAN,CAAcH,IAAd,IAAsBA,KAAKI,IAAL,CAAU,GAAV,CAAtB,GAAuCJ,IAAnD;;aAEOL,WAAWe,GAAX,EAAgBT,GAAhB,CAAP;UACII,IAAJ,CAASL,IAAT,EAAea,OAAf;KAjBG;WAmBE;aAAejB,IAAImB,KAAJ,sBAAf;KAnBF;WAoBE;aAAenB,IAAIoB,KAAJ,sBAAf;;GApBT;CAVF;;AAkCAV,WAAWU,KAAX,GAAmB;SAAepB,IAAIoB,KAAJ,sBAAf;CAAnB;AACAV,WAAWS,KAAX,GAAmB;SAAenB,IAAImB,KAAJ,sBAAf;CAAnB;;;;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"happy-bus.js","sources":["../index.js"],"sourcesContent":["import Vue$ from 'vue'\nimport { version } from './package.json'\nlet Vue = Vue$\nif (typeof window !== 'undefined' && window.Vue) {\n Vue = window.Vue\n}\n\n// 记录所有的事件类型与事件函数\nconst EventStore = {}\nconst Bus = new Vue()\n\n// 移除所有事件的方法\nconst destroyHandler = function () {\n // this 为调用此方法的vue组件\n const currentEventObj = EventStore[this._uid]\n if (typeof currentEventObj === 'undefined') {\n return\n }\n for (let type in currentEventObj) {\n const key = Array.isArray(type) ? type.join(',') : type\n // Bus 解绑事件\n Bus.$off(type, currentEventObj[key])\n }\n // 删除记录的事件集合\n delete EventStore[this._uid]\n}\n\nconst BusFactory = vm => {\n // 当前调用组件的 destroyed 钩子\n const destroyed = vm.$options.destroyed || []\n // 当前组件的唯一标示(vue生成的自增ID)\n const uid = vm._uid\n // 初始化当前组件的事件集合对象\n EventStore[uid] = {}\n // 为当前组件挂载destroyed钩子\n !destroyed.includes(destroyHandler) && vm.$once('hook:destroyed', destroyHandler)\n\n return {\n $on: (type, handler) => {\n const key = Array.isArray(type) ? type.join(',') : type\n EventStore[uid][key] = handler\n Bus.$on(type, handler)\n },\n $off: (type, handler) => {\n // $off() 时 type 为空,移除所有事件\n if (!type) {\n // 删除该uid下事件集合\n delete EventStore[uid]\n Bus.$off()\n return\n }\n const key = Array.isArray(type) ? type.join(',') : type\n // 删除对应的事件\n delete EventStore[uid][key]\n Bus.$off(type, handler)\n },\n $once: (...params) => Bus.$once(...params),\n $emit: (...params) => Bus.$emit(...params)\n }\n}\n\nBusFactory.$emit = (...params) => Bus.$emit(...params)\nBusFactory.$once = (...params) => Bus.$once(...params)\n\nexport default BusFactory\nexport { Bus, version }\n"],"names":["Vue","Vue$","window","EventStore","Bus","destroyHandler","currentEventObj","_uid","type","key","Array","isArray","join","$off","BusFactory","destroyed","vm","$options","uid","includes","$once","handler","$on","$emit"],"mappings":";;;;;;;;;;;;;;;;AAEA,IAAIA,MAAMC,IAAV;AACA,IAAI,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,OAAOF,GAA5C,EAAiD;QACzCE,OAAOF,GAAb;;;;AAIF,IAAMG,aAAa,EAAnB;AACA,IAAMC,MAAM,IAAIJ,GAAJ,EAAZ;;;AAGA,IAAMK,iBAAiB,SAAjBA,cAAiB,GAAY;;MAE3BC,kBAAkBH,WAAW,KAAKI,IAAhB,CAAxB;MACI,OAAOD,eAAP,KAA2B,WAA/B,EAA4C;;;OAGvC,IAAIE,IAAT,IAAiBF,eAAjB,EAAkC;QAC1BG,MAAMC,MAAMC,OAAN,CAAcH,IAAd,IAAsBA,KAAKI,IAAL,CAAU,GAAV,CAAtB,GAAuCJ,IAAnD;;QAEIK,IAAJ,CAASL,IAAT,EAAeF,gBAAgBG,GAAhB,CAAf;;;SAGKN,WAAW,KAAKI,IAAhB,CAAP;CAZF;;AAeA,IAAMO,aAAa,SAAbA,UAAa,KAAM;;MAEjBC,YAAYC,GAAGC,QAAH,CAAYF,SAAZ,IAAyB,EAA3C;;MAEMG,MAAMF,GAAGT,IAAf;;aAEWW,GAAX,IAAkB,EAAlB;;GAECH,UAAUI,QAAV,CAAmBd,cAAnB,CAAD,IAAuCW,GAAGI,KAAH,CAAS,gBAAT,EAA2Bf,cAA3B,CAAvC;;SAEO;SACA,aAACG,IAAD,EAAOa,OAAP,EAAmB;UAChBZ,MAAMC,MAAMC,OAAN,CAAcH,IAAd,IAAsBA,KAAKI,IAAL,CAAU,GAAV,CAAtB,GAAuCJ,IAAnD;iBACWU,GAAX,EAAgBT,GAAhB,IAAuBY,OAAvB;UACIC,GAAJ,CAAQd,IAAR,EAAca,OAAd;KAJG;UAMC,cAACb,IAAD,EAAOa,OAAP,EAAmB;;UAEnB,CAACb,IAAL,EAAW;;eAEFL,WAAWe,GAAX,CAAP;YACIL,IAAJ;;;UAGIJ,MAAMC,MAAMC,OAAN,CAAcH,IAAd,IAAsBA,KAAKI,IAAL,CAAU,GAAV,CAAtB,GAAuCJ,IAAnD;;aAEOL,WAAWe,GAAX,EAAgBT,GAAhB,CAAP;UACII,IAAJ,CAASL,IAAT,EAAea,OAAf;KAjBG;WAmBE;aAAejB,IAAIgB,KAAJ,sBAAf;KAnBF;WAoBE;aAAehB,IAAImB,KAAJ,sBAAf;;GApBT;CAVF;;AAkCAT,WAAWS,KAAX,GAAmB;SAAenB,IAAImB,KAAJ,sBAAf;CAAnB;AACAT,WAAWM,KAAX,GAAmB;SAAehB,IAAIgB,KAAJ,sBAAf;CAAnB;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/happy-bus.min.js b/dist/happy-bus.min.js index 8c519c2..6fcd08d 100644 --- a/dist/happy-bus.min.js +++ b/dist/happy-bus.min.js @@ -1,8 +1,8 @@ /*! name: vue-happy-bus - version: 1.0.1 + version: 1.0.3 author: tangdaohai@outlook.com github: https://github.com/tangdaohai/vue-happy-bus */ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],n):n(e["happy-bus"]={},e.Vue$)}(this,function(e,n){"use strict";var i=n=n&&n.hasOwnProperty("default")?n.default:n;"undefined"!=typeof window&&window.Vue&&(i=window.Vue);var o={},r=new i,t=function(){var e=o[this._uid];if(void 0!==e){for(var n in e){var i=Array.isArray(n)?n.join(","):n;r.$off(n,e[i])}delete o[this._uid]}},u=function(e){var n=e.$options.destroyed,i=e._uid;return o[i]={},!n.includes(t)&&n.push(t),{$on:function(e,n){var t=Array.isArray(e)?e.join(","):e;o[i][t]=n,r.$on(e,n)},$off:function(e,n){if(!e)return delete o[i],void r.$off();var t=Array.isArray(e)?e.join(","):e;delete o[i][t],r.$off(e,n)},$once:function(){return r.$once.apply(r,arguments)},$emit:function(){return r.$emit.apply(r,arguments)}}};u.$emit=function(){return r.$emit.apply(r,arguments)},u.$once=function(){return r.$once.apply(r,arguments)},e.default=u,e.Bus=r,e.version="1.0.1",Object.defineProperty(e,"__esModule",{value:!0})}); +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],n):n(e["happy-bus"]={},e.Vue$)}(this,function(e,n){"use strict";var o=n=n&&n.hasOwnProperty("default")?n.default:n;"undefined"!=typeof window&&window.Vue&&(o=window.Vue);var i={},r=new o,t=function(){var e=i[this._uid];if(void 0!==e){for(var n in e){var o=Array.isArray(n)?n.join(","):n;r.$off(n,e[o])}delete i[this._uid]}},u=function(e){var n=e.$options.destroyed||[],o=e._uid;return i[o]={},!n.includes(t)&&e.$once("hook:destroyed",t),{$on:function(e,n){var t=Array.isArray(e)?e.join(","):e;i[o][t]=n,r.$on(e,n)},$off:function(e,n){if(!e)return delete i[o],void r.$off();var t=Array.isArray(e)?e.join(","):e;delete i[o][t],r.$off(e,n)},$once:function(){return r.$once.apply(r,arguments)},$emit:function(){return r.$emit.apply(r,arguments)}}};u.$emit=function(){return r.$emit.apply(r,arguments)},u.$once=function(){return r.$once.apply(r,arguments)},e.default=u,e.Bus=r,e.version="1.0.3",Object.defineProperty(e,"__esModule",{value:!0})}); //# sourceMappingURL=true \ No newline at end of file diff --git a/dist/happy-bus.min.js.map b/dist/happy-bus.min.js.map index b3b8675..b03cae7 100644 --- a/dist/happy-bus.min.js.map +++ b/dist/happy-bus.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["dist/happy-bus.js"],"names":["global","factory","exports","module","require","define","amd","Vue$","this","Vue","hasOwnProperty","window","EventStore","Bus","destroyHandler","currentEventObj","_uid","type","key","Array","isArray","join","$off","BusFactory","vm","destroyed","$options","uid","includes","push","$on","handler","$once","apply","arguments","$emit","version","Object","defineProperty","value"],"mappings":";;;;;;CAMC,SAAUA,EAAQC,GACC,iBAAZC,SAA0C,oBAAXC,OAAyBF,EAAQC,QAASE,QAAQ,QACtE,mBAAXC,QAAyBA,OAAOC,IAAMD,QAAQ,UAAW,OAAQJ,GACvEA,EAASD,EAAO,gBAAmBA,EAAOO,MAH5C,CAIEC,KAAM,SAAWN,EAAQK,GAAQ,aAInC,IAEIE,EAJJF,EAAOA,GAAQA,EAAKG,eAAe,WAAaH,EAAc,QAAIA,EAK5C,oBAAXI,QAA0BA,OAAOF,MAC1CA,EAAME,OAAOF,KAIf,IAAIG,KACAC,EAAM,IAAIJ,EAGVK,EAAiB,WAEnB,IAAIC,EAAkBH,EAAWJ,KAAKQ,MACtC,QAA+B,IAApBD,EAAX,CAGA,IAAK,IAAIE,KAAQF,EAAiB,CAChC,IAAIG,EAAMC,MAAMC,QAAQH,GAAQA,EAAKI,KAAK,KAAOJ,EAEjDJ,EAAIS,KAAKL,EAAMF,EAAgBG,WAG1BN,EAAWJ,KAAKQ,QAGrBO,EAAa,SAAoBC,GAEnC,IAAIC,EAAYD,EAAGE,SAASD,UAExBE,EAAMH,EAAGR,KAMb,OAJAJ,EAAWe,OAEVF,EAAUG,SAASd,IAAmBW,EAAUI,KAAKf,IAGpDgB,IAAK,SAAab,EAAMc,GACtB,IAAIb,EAAMC,MAAMC,QAAQH,GAAQA,EAAKI,KAAK,KAAOJ,EACjDL,EAAWe,GAAKT,GAAOa,EACvBlB,EAAIiB,IAAIb,EAAMc,IAEhBT,KAAM,SAAcL,EAAMc,GAExB,IAAKd,EAIH,cAFOL,EAAWe,QAClBd,EAAIS,OAGN,IAAIJ,EAAMC,MAAMC,QAAQH,GAAQA,EAAKI,KAAK,KAAOJ,SAE1CL,EAAWe,GAAKT,GACvBL,EAAIS,KAAKL,EAAMc,IAEjBC,MAAO,WACL,OAAOnB,EAAImB,MAAMC,MAAMpB,EAAKqB,YAE9BC,MAAO,WACL,OAAOtB,EAAIsB,MAAMF,MAAMpB,EAAKqB,cAKlCX,EAAWY,MAAQ,WACjB,OAAOtB,EAAIsB,MAAMF,MAAMpB,EAAKqB,YAE9BX,EAAWS,MAAQ,WACjB,OAAOnB,EAAImB,MAAMC,MAAMpB,EAAKqB,YAG9BhC,EAAiB,QAAIqB,EACrBrB,EAAQW,IAAMA,EACdX,EAAQkC,QA1EM,QA4EdC,OAAOC,eAAepC,EAAS,cAAgBqC,OAAO"} \ No newline at end of file +{"version":3,"sources":["dist/happy-bus.js"],"names":["global","factory","exports","module","require","define","amd","Vue$","this","Vue","hasOwnProperty","window","EventStore","Bus","destroyHandler","currentEventObj","_uid","type","key","Array","isArray","join","$off","BusFactory","vm","destroyed","$options","uid","includes","$once","$on","handler","apply","arguments","$emit","version","Object","defineProperty","value"],"mappings":";;;;;;CAMC,SAAUA,EAAQC,GACC,iBAAZC,SAA0C,oBAAXC,OAAyBF,EAAQC,QAASE,QAAQ,QACtE,mBAAXC,QAAyBA,OAAOC,IAAMD,QAAQ,UAAW,OAAQJ,GACvEA,EAASD,EAAO,gBAAmBA,EAAOO,MAH5C,CAIEC,KAAM,SAAWN,EAAQK,GAAQ,aAInC,IAEIE,EAJJF,EAAOA,GAAQA,EAAKG,eAAe,WAAaH,EAAc,QAAIA,EAK5C,oBAAXI,QAA0BA,OAAOF,MAC1CA,EAAME,OAAOF,KAIf,IAAIG,KACAC,EAAM,IAAIJ,EAGVK,EAAiB,WAEnB,IAAIC,EAAkBH,EAAWJ,KAAKQ,MACtC,QAA+B,IAApBD,EAAX,CAGA,IAAK,IAAIE,KAAQF,EAAiB,CAChC,IAAIG,EAAMC,MAAMC,QAAQH,GAAQA,EAAKI,KAAK,KAAOJ,EAEjDJ,EAAIS,KAAKL,EAAMF,EAAgBG,WAG1BN,EAAWJ,KAAKQ,QAGrBO,EAAa,SAAoBC,GAEnC,IAAIC,EAAYD,EAAGE,SAASD,cAExBE,EAAMH,EAAGR,KAMb,OAJAJ,EAAWe,OAEVF,EAAUG,SAASd,IAAmBU,EAAGK,MAAM,iBAAkBf,IAGhEgB,IAAK,SAAab,EAAMc,GACtB,IAAIb,EAAMC,MAAMC,QAAQH,GAAQA,EAAKI,KAAK,KAAOJ,EACjDL,EAAWe,GAAKT,GAAOa,EACvBlB,EAAIiB,IAAIb,EAAMc,IAEhBT,KAAM,SAAcL,EAAMc,GAExB,IAAKd,EAIH,cAFOL,EAAWe,QAClBd,EAAIS,OAGN,IAAIJ,EAAMC,MAAMC,QAAQH,GAAQA,EAAKI,KAAK,KAAOJ,SAE1CL,EAAWe,GAAKT,GACvBL,EAAIS,KAAKL,EAAMc,IAEjBF,MAAO,WACL,OAAOhB,EAAIgB,MAAMG,MAAMnB,EAAKoB,YAE9BC,MAAO,WACL,OAAOrB,EAAIqB,MAAMF,MAAMnB,EAAKoB,cAKlCV,EAAWW,MAAQ,WACjB,OAAOrB,EAAIqB,MAAMF,MAAMnB,EAAKoB,YAE9BV,EAAWM,MAAQ,WACjB,OAAOhB,EAAIgB,MAAMG,MAAMnB,EAAKoB,YAG9B/B,EAAiB,QAAIqB,EACrBrB,EAAQW,IAAMA,EACdX,EAAQiC,QA1EM,QA4EdC,OAAOC,eAAenC,EAAS,cAAgBoC,OAAO"} \ No newline at end of file diff --git a/package.json b/package.json index 7c2235f..e0eb653 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-happy-bus", - "version": "1.0.2", + "version": "1.0.3", "description": "Event Bus for Vue2. automatically cancel listening events when destroyed.", "main": "./dist/happy-bus.js", "scripts": {