From 9123bd649df7f74a654288ee14799627f86e3d28 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Fri, 29 Nov 2019 15:54:27 +0800 Subject: [PATCH] feat(v3): __wxUsingComponents --- packages/uni-app-plus/dist/index.v3.js | 17 ++++++++++++++--- .../mp-weixin/transform/script-transformer.js | 2 +- .../vue-cli-plugin-uni/lib/app-plus/index.js | 15 ++++++++------- src/core/runtime/mp/index.js | 5 ++--- src/core/runtime/mp/parser/component-parser.js | 6 ++++++ src/core/runtime/mp/parser/components-parser.js | 3 +++ .../service/framework/plugins/lifecycle.js | 12 +++++++++++- 7 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 src/core/runtime/mp/parser/components-parser.js diff --git a/packages/uni-app-plus/dist/index.v3.js b/packages/uni-app-plus/dist/index.v3.js index 02095d88c..7567892d6 100644 --- a/packages/uni-app-plus/dist/index.v3.js +++ b/packages/uni-app-plus/dist/index.v3.js @@ -4754,7 +4754,7 @@ var serviceContext = (function () { }); }, indexOf (page) { - const itemLength = config.list.length; + const itemLength = config && config.list && config.list.length; if (itemLength) { for (let i = 0; i < itemLength; i++) { if ( @@ -6048,7 +6048,7 @@ var serviceContext = (function () { hasContentType = true; headers['Content-Type'] = header[name]; // TODO 需要重构 - if(method === 'POST' && header[name].indexOf('application/x-www-form-urlencoded') === 0) { + if (method === 'POST' && header[name].indexOf('application/x-www-form-urlencoded') === 0) { let bodyArray = []; for (let key in data) { if (data.hasOwnProperty(key)) { @@ -12288,7 +12288,18 @@ var serviceContext = (function () { lifecycleMixin(Vue); Vue.mixin({ - beforeCreate () { + beforeCreate () { + // TODO 临时解决方案,service 层也注入 wxs (适用于工具类) + const options = this.$options; + + const wxs = options.wxs; + if (wxs) { + Object.keys(wxs).forEach(module => { + this[module] = wxs[module]; + }); + } + + if (this.mpType === 'page') { this.$scope = this.$options.pageInstance; this.$scope.$vm = this; diff --git a/packages/uni-migration/lib/mp-weixin/transform/script-transformer.js b/packages/uni-migration/lib/mp-weixin/transform/script-transformer.js index 014dcbbbf..147f53e60 100644 --- a/packages/uni-migration/lib/mp-weixin/transform/script-transformer.js +++ b/packages/uni-migration/lib/mp-weixin/transform/script-transformer.js @@ -7,7 +7,7 @@ const { function transformScript(content, route, usingComponentsCode) { return `global['__wxRoute'].push('${route}') -global['__wxUsingComponents'] = ${usingComponentsCode} +global['__wxUsingComponents'].push(${usingComponentsCode}) ${content} export default global['__wxComponents']['${route}']` } diff --git a/packages/vue-cli-plugin-uni/lib/app-plus/index.js b/packages/vue-cli-plugin-uni/lib/app-plus/index.js index a2932fa7d..ff4c2c626 100644 --- a/packages/vue-cli-plugin-uni/lib/app-plus/index.js +++ b/packages/vue-cli-plugin-uni/lib/app-plus/index.js @@ -71,13 +71,14 @@ const v3 = { '../../packages/webpack-uni-app-loader/view/script') }] }) - rules.push({ - resourceQuery: [/lang=wxs/, /blockType=wxs/], - use: [{ - loader: path.resolve(__dirname, '../../packages/webpack-uni-filter-loader') - }] - }) - } + } + // TODO 临时方案,将 wxs 也编译至 service + rules.push({ + resourceQuery: [/lang=wxs/, /blockType=wxs/], + use: [{ + loader: path.resolve(__dirname, '../../packages/webpack-uni-filter-loader') + }] + }) const entry = {} if (isAppService) { diff --git a/src/core/runtime/mp/index.js b/src/core/runtime/mp/index.js index 5ac475b5a..a1ec32eb8 100644 --- a/src/core/runtime/mp/index.js +++ b/src/core/runtime/mp/index.js @@ -7,13 +7,12 @@ import polyfill from './polyfill' export * from './wxs' global['__wxRoute'] = [] +global['__wxComponents'] = Object.create(null) +global['__wxUsingComponents'] = [] export function Component (options) { const componentOptions = parseComponent(options) componentOptions.mixins.unshift(polyfill) - if (!global['__wxComponents']) { - global['__wxComponents'] = Object.create(null) - } global['__wxComponents'][global['__wxRoute'].pop()] = componentOptions } diff --git a/src/core/runtime/mp/parser/component-parser.js b/src/core/runtime/mp/parser/component-parser.js index ab1b2cb10..fbe6e3c74 100644 --- a/src/core/runtime/mp/parser/component-parser.js +++ b/src/core/runtime/mp/parser/component-parser.js @@ -6,6 +6,10 @@ import { parseProperties } from './properties-parser' +import { + parseComponents +} from './components-parser' + import { parseOptions } from './options-parser' @@ -68,6 +72,8 @@ export function parseComponent (mpComponentOptions) { } } + parseComponents(vueComponentOptions) + parseData(data, vueComponentOptions) parseOptions(options, vueComponentOptions) parseMethods(methods, vueComponentOptions) diff --git a/src/core/runtime/mp/parser/components-parser.js b/src/core/runtime/mp/parser/components-parser.js new file mode 100644 index 000000000..0136201dd --- /dev/null +++ b/src/core/runtime/mp/parser/components-parser.js @@ -0,0 +1,3 @@ +export function parseComponents (vueComponentOptions) { + vueComponentOptions.components = global['__wxUsingComponents'].pop() +} diff --git a/src/platforms/app-plus/service/framework/plugins/lifecycle.js b/src/platforms/app-plus/service/framework/plugins/lifecycle.js index bf904cca0..c25b72310 100644 --- a/src/platforms/app-plus/service/framework/plugins/lifecycle.js +++ b/src/platforms/app-plus/service/framework/plugins/lifecycle.js @@ -49,7 +49,17 @@ export function initLifecycle (Vue) { lifecycleMixin(Vue) Vue.mixin({ - beforeCreate () { + beforeCreate () { + // TODO 临时解决方案,service 层也注入 wxs (适用于工具类) + const options = this.$options + + const wxs = options.wxs + if (wxs) { + Object.keys(wxs).forEach(module => { + this[module] = wxs[module] + }) + } + if (this.mpType === 'page') { this.$scope = this.$options.pageInstance this.$scope.$vm = this -- GitLab