From e5285d29bbc37ffa521df1c11abc37d085c136cc Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Thu, 23 May 2019 17:53:24 +0800 Subject: [PATCH] feat(runtime): add uni.$on,uni.$once,uni.$off,uni.$emit --- packages/uni-app-plus/dist/index.js | 39 +++++++++++++++++++++++---- packages/uni-mp-alipay/dist/index.js | 33 +++++++++++++++++++---- packages/uni-mp-baidu/dist/index.js | 33 +++++++++++++++++++---- packages/uni-mp-toutiao/dist/index.js | 33 +++++++++++++++++++---- packages/uni-mp-weixin/dist/index.js | 33 +++++++++++++++++++---- src/core/helpers/promise.js | 2 +- src/core/runtime/event.js | 1 + src/core/runtime/index.js | 35 +++++++++++++++++------- src/core/service/api/event.js | 8 ++++++ 9 files changed, 181 insertions(+), 36 deletions(-) create mode 100644 src/core/runtime/event.js create mode 100644 src/core/service/api/event.js diff --git a/packages/uni-app-plus/dist/index.js b/packages/uni-app-plus/dist/index.js index 4738a61e4..5103512f9 100644 --- a/packages/uni-app-plus/dist/index.js +++ b/packages/uni-app-plus/dist/index.js @@ -40,7 +40,7 @@ const camelize = cached((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') }); -const SYNC_API_RE = /getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; +const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const CONTEXT_API_RE = /^create|Manager$/; @@ -256,6 +256,22 @@ TODOS.forEach(function (name) { todoApis[name] = createTodoApi(name); }); +const Emitter = new Vue(); + +const $on = Emitter.$on.bind(Emitter); +const $off = Emitter.$off.bind(Emitter); +const $once = Emitter.$once.bind(Emitter); +const $emit = Emitter.$emit.bind(Emitter); + + + +var eventApi = /*#__PURE__*/Object.freeze({ + $on: $on, + $off: $off, + $once: $once, + $emit: $emit +}); + function wrapper$1 (webview) { webview.$processed = true; @@ -1142,6 +1158,9 @@ if (typeof Proxy !== 'undefined') { if (api[name]) { return promisify(name, api[name]) } + if (eventApi[name]) { + return eventApi[name] + } if (!hasOwn(wx, name) && !hasOwn(protocols, name)) { return } @@ -1151,6 +1170,10 @@ if (typeof Proxy !== 'undefined') { } else { uni.upx2px = upx2px; + Object.keys(eventApi).forEach(name => { + uni[name] = eventApi[name]; + }); + Object.keys(api).forEach(name => { uni[name] = promisify(name, api[name]); }); @@ -1161,10 +1184,16 @@ if (typeof Proxy !== 'undefined') { } }); } - -wx.createApp = createApp; -wx.createPage = createPage; -wx.createComponent = createComponent; + +{ + if (typeof global !== 'undefined') { + global.UniEmitter = eventApi; + } +} + +wx.createApp = createApp; +wx.createPage = createPage; +wx.createComponent = createComponent; var uni$1 = uni; diff --git a/packages/uni-mp-alipay/dist/index.js b/packages/uni-mp-alipay/dist/index.js index 008819be1..7f7916c42 100644 --- a/packages/uni-mp-alipay/dist/index.js +++ b/packages/uni-mp-alipay/dist/index.js @@ -40,7 +40,7 @@ const camelize = cached((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') }); -const SYNC_API_RE = /getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; +const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const CONTEXT_API_RE = /^create|Manager$/; @@ -656,6 +656,22 @@ var extraApi = /*#__PURE__*/Object.freeze({ getProvider: getProvider }); +const Emitter = new Vue(); + +const $on = Emitter.$on.bind(Emitter); +const $off = Emitter.$off.bind(Emitter); +const $once = Emitter.$once.bind(Emitter); +const $emit = Emitter.$emit.bind(Emitter); + + + +var eventApi = /*#__PURE__*/Object.freeze({ + $on: $on, + $off: $off, + $once: $once, + $emit: $emit +}); + function setStorageSync (key, data) { return my.setStorageSync({ key, @@ -1667,6 +1683,9 @@ if (typeof Proxy !== 'undefined') { return promisify(name, todoApis[name]) } } + if (eventApi[name]) { + return eventApi[name] + } if (!hasOwn(my, name) && !hasOwn(protocols, name)) { return } @@ -1685,6 +1704,10 @@ if (typeof Proxy !== 'undefined') { }); } + Object.keys(eventApi).forEach(name => { + uni[name] = eventApi[name]; + }); + Object.keys(api).forEach(name => { uni[name] = promisify(name, api[name]); }); @@ -1695,10 +1718,10 @@ if (typeof Proxy !== 'undefined') { } }); } - -my.createApp = createApp; -my.createPage = createPage; -my.createComponent = createComponent; + +my.createApp = createApp; +my.createPage = createPage; +my.createComponent = createComponent; var uni$1 = uni; diff --git a/packages/uni-mp-baidu/dist/index.js b/packages/uni-mp-baidu/dist/index.js index 9a52ab2c6..93bb719ea 100644 --- a/packages/uni-mp-baidu/dist/index.js +++ b/packages/uni-mp-baidu/dist/index.js @@ -40,7 +40,7 @@ const camelize = cached((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') }); -const SYNC_API_RE = /getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; +const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const CONTEXT_API_RE = /^create|Manager$/; @@ -413,6 +413,22 @@ var extraApi = /*#__PURE__*/Object.freeze({ getProvider: getProvider }); +const Emitter = new Vue(); + +const $on = Emitter.$on.bind(Emitter); +const $off = Emitter.$off.bind(Emitter); +const $once = Emitter.$once.bind(Emitter); +const $emit = Emitter.$emit.bind(Emitter); + + + +var eventApi = /*#__PURE__*/Object.freeze({ + $on: $on, + $off: $off, + $once: $once, + $emit: $emit +}); + function requestPayment (params) { let parseError = false; if (typeof params.orderInfo === 'string') { @@ -1286,6 +1302,9 @@ if (typeof Proxy !== 'undefined') { return promisify(name, todoApis[name]) } } + if (eventApi[name]) { + return eventApi[name] + } if (!hasOwn(swan, name) && !hasOwn(protocols, name)) { return } @@ -1304,6 +1323,10 @@ if (typeof Proxy !== 'undefined') { }); } + Object.keys(eventApi).forEach(name => { + uni[name] = eventApi[name]; + }); + Object.keys(api).forEach(name => { uni[name] = promisify(name, api[name]); }); @@ -1314,10 +1337,10 @@ if (typeof Proxy !== 'undefined') { } }); } - -swan.createApp = createApp; -swan.createPage = createPage; -swan.createComponent = createComponent; + +swan.createApp = createApp; +swan.createPage = createPage; +swan.createComponent = createComponent; var uni$1 = uni; diff --git a/packages/uni-mp-toutiao/dist/index.js b/packages/uni-mp-toutiao/dist/index.js index 3ee4026ed..0fdab1712 100644 --- a/packages/uni-mp-toutiao/dist/index.js +++ b/packages/uni-mp-toutiao/dist/index.js @@ -40,7 +40,7 @@ const camelize = cached((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') }); -const SYNC_API_RE = /getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; +const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const CONTEXT_API_RE = /^create|Manager$/; @@ -474,6 +474,22 @@ var extraApi = /*#__PURE__*/Object.freeze({ getProvider: getProvider }); +const Emitter = new Vue(); + +const $on = Emitter.$on.bind(Emitter); +const $off = Emitter.$off.bind(Emitter); +const $once = Emitter.$once.bind(Emitter); +const $emit = Emitter.$emit.bind(Emitter); + + + +var eventApi = /*#__PURE__*/Object.freeze({ + $on: $on, + $off: $off, + $once: $once, + $emit: $emit +}); + var api = /*#__PURE__*/Object.freeze({ @@ -1361,6 +1377,9 @@ if (typeof Proxy !== 'undefined') { return promisify(name, todoApis[name]) } } + if (eventApi[name]) { + return eventApi[name] + } if (!hasOwn(tt, name) && !hasOwn(protocols, name)) { return } @@ -1379,6 +1398,10 @@ if (typeof Proxy !== 'undefined') { }); } + Object.keys(eventApi).forEach(name => { + uni[name] = eventApi[name]; + }); + Object.keys(api).forEach(name => { uni[name] = promisify(name, api[name]); }); @@ -1389,10 +1412,10 @@ if (typeof Proxy !== 'undefined') { } }); } - -tt.createApp = createApp; -tt.createPage = createPage; -tt.createComponent = createComponent; + +tt.createApp = createApp; +tt.createPage = createPage; +tt.createComponent = createComponent; var uni$1 = uni; diff --git a/packages/uni-mp-weixin/dist/index.js b/packages/uni-mp-weixin/dist/index.js index 83ed48fc0..fcebb280e 100644 --- a/packages/uni-mp-weixin/dist/index.js +++ b/packages/uni-mp-weixin/dist/index.js @@ -40,7 +40,7 @@ const camelize = cached((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') }); -const SYNC_API_RE = /getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; +const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const CONTEXT_API_RE = /^create|Manager$/; @@ -326,6 +326,22 @@ var extraApi = /*#__PURE__*/Object.freeze({ getProvider: getProvider }); +const Emitter = new Vue(); + +const $on = Emitter.$on.bind(Emitter); +const $off = Emitter.$off.bind(Emitter); +const $once = Emitter.$once.bind(Emitter); +const $emit = Emitter.$emit.bind(Emitter); + + + +var eventApi = /*#__PURE__*/Object.freeze({ + $on: $on, + $off: $off, + $once: $once, + $emit: $emit +}); + var api = /*#__PURE__*/Object.freeze({ @@ -1121,6 +1137,9 @@ if (typeof Proxy !== 'undefined') { return promisify(name, todoApis[name]) } } + if (eventApi[name]) { + return eventApi[name] + } if (!hasOwn(wx, name) && !hasOwn(protocols, name)) { return } @@ -1139,6 +1158,10 @@ if (typeof Proxy !== 'undefined') { }); } + Object.keys(eventApi).forEach(name => { + uni[name] = eventApi[name]; + }); + Object.keys(api).forEach(name => { uni[name] = promisify(name, api[name]); }); @@ -1149,10 +1172,10 @@ if (typeof Proxy !== 'undefined') { } }); } - -wx.createApp = createApp; -wx.createPage = createPage; -wx.createComponent = createComponent; + +wx.createApp = createApp; +wx.createPage = createPage; +wx.createComponent = createComponent; var uni$1 = uni; diff --git a/src/core/helpers/promise.js b/src/core/helpers/promise.js index 16aab48f0..f356cb0d7 100644 --- a/src/core/helpers/promise.js +++ b/src/core/helpers/promise.js @@ -2,7 +2,7 @@ import { isFn } from 'uni-shared' -const SYNC_API_RE = /getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/ +const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/ const CONTEXT_API_RE = /^create|Manager$/ diff --git a/src/core/runtime/event.js b/src/core/runtime/event.js new file mode 100644 index 000000000..e34bb752b --- /dev/null +++ b/src/core/runtime/event.js @@ -0,0 +1 @@ +export * from '../service/api/event' diff --git a/src/core/runtime/index.js b/src/core/runtime/index.js index c80c2d9af..9fca81a42 100644 --- a/src/core/runtime/index.js +++ b/src/core/runtime/index.js @@ -16,6 +16,8 @@ import todoApi from './todo' import * as extraApi from './extra' +import * as eventApi from './event' + import * as api from 'uni-platform/service/api/index.js' import { @@ -59,6 +61,9 @@ if (typeof Proxy !== 'undefined') { return promisify(name, todoApi[name]) } } + if (eventApi[name]) { + return eventApi[name] + } if (!hasOwn(__GLOBAL__, name) && !hasOwn(protocols, name)) { return } @@ -77,6 +82,10 @@ if (typeof Proxy !== 'undefined') { }) } + Object.keys(eventApi).forEach(name => { + uni[name] = eventApi[name] + }) + Object.keys(api).forEach(name => { uni[name] = promisify(name, api[name]) }) @@ -87,15 +96,21 @@ if (typeof Proxy !== 'undefined') { } }) } - -__GLOBAL__.createApp = createApp -__GLOBAL__.createPage = createPage -__GLOBAL__.createComponent = createComponent - -export { - createApp, - createPage, - createComponent -} + +if (__PLATFORM__ === 'app-plus') { + if (typeof global !== 'undefined') { + global.UniEmitter = eventApi + } +} + +__GLOBAL__.createApp = createApp +__GLOBAL__.createPage = createPage +__GLOBAL__.createComponent = createComponent + +export { + createApp, + createPage, + createComponent +} export default uni diff --git a/src/core/service/api/event.js b/src/core/service/api/event.js new file mode 100644 index 000000000..320bc5209 --- /dev/null +++ b/src/core/service/api/event.js @@ -0,0 +1,8 @@ +import Vue from 'vue' + +const Emitter = new Vue() + +export const $on = Emitter.$on.bind(Emitter) +export const $off = Emitter.$off.bind(Emitter) +export const $once = Emitter.$once.bind(Emitter) +export const $emit = Emitter.$emit.bind(Emitter) -- GitLab