From f1521aaa97f7fa529eb886b2f3c5eeb5c5b152ad Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Thu, 14 Nov 2019 19:12:44 +0800 Subject: [PATCH] fix(mp-dd): component lifecycle --- packages/uni-mp-alipay/dist/index.js | 13 +++++++++---- packages/uni-mp-qq/dist/index.js | 12 ++++++++++++ packages/uni-mp-weixin/dist/index.js | 2 +- .../mp-alipay/runtime/wrapper/component-parser.js | 10 ++++++++-- src/platforms/mp-alipay/runtime/wrapper/util.js | 3 +-- .../mp-weixin/runtime/wrapper/app-base-parser.js | 2 +- .../runtime/wrapper/component-base-parser.js | 4 ++-- 7 files changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/uni-mp-alipay/dist/index.js b/packages/uni-mp-alipay/dist/index.js index e943e93a..eaceec18 100644 --- a/packages/uni-mp-alipay/dist/index.js +++ b/packages/uni-mp-alipay/dist/index.js @@ -1667,8 +1667,7 @@ const customize = cached((str) => { return camelize(str.replace(customizeRE, '-')) }); -// 钉钉小程序是 component2 模式 -const isComponent2 = my.dd || my.canIUse('component2'); +const isComponent2 = my.canIUse('component2'); const mocks = ['$id']; @@ -2023,8 +2022,14 @@ function parseComponent (vueComponentOptions) { mixins: initBehaviors(vueOptions, initBehavior), data: initData(vueOptions, Vue.prototype), props, - didMount () { - initVm.call(this, VueComponent); + didMount () { + if (my.dd) { // 钉钉小程序底层基础库有 bug,组件嵌套使用时,在 didMount 中无法及时调用 props 中的方法 + setTimeout(() => { + initVm.call(this, VueComponent); + }, 4); + } else { + initVm.call(this, VueComponent); + } initSpecialMethods(this); diff --git a/packages/uni-mp-qq/dist/index.js b/packages/uni-mp-qq/dist/index.js index 550c5722..50e52986 100644 --- a/packages/uni-mp-qq/dist/index.js +++ b/packages/uni-mp-qq/dist/index.js @@ -1214,6 +1214,11 @@ function parseBaseApp (vm, { if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 return } + { + if (!wx.canIUse('nextTick')) { // 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断 + console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上'); + } + } this.$vm = vm; @@ -1339,6 +1344,13 @@ function parseBaseComponent (vueComponentOptions, { addGlobalClass: true }; + { + // 微信 multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项 + if (vueOptions['mp-weixin'] && vueOptions['mp-weixin']['options']) { + Object.assign(options, vueOptions['mp-weixin']['options']); + } + } + const componentOptions = { options, data: initData(vueOptions, Vue.prototype), diff --git a/packages/uni-mp-weixin/dist/index.js b/packages/uni-mp-weixin/dist/index.js index 019d35b6..bfe222be 100644 --- a/packages/uni-mp-weixin/dist/index.js +++ b/packages/uni-mp-weixin/dist/index.js @@ -1281,7 +1281,7 @@ function parseBaseComponent (vueComponentOptions, { }; { - // 微信multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项 + // 微信 multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项 if (vueOptions['mp-weixin'] && vueOptions['mp-weixin']['options']) { Object.assign(options, vueOptions['mp-weixin']['options']); } diff --git a/src/platforms/mp-alipay/runtime/wrapper/component-parser.js b/src/platforms/mp-alipay/runtime/wrapper/component-parser.js index e589887c..5d8a9be9 100644 --- a/src/platforms/mp-alipay/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-alipay/runtime/wrapper/component-parser.js @@ -91,8 +91,14 @@ export default function parseComponent (vueComponentOptions) { mixins: initBehaviors(vueOptions, initBehavior), data: initData(vueOptions, Vue.prototype), props, - didMount () { - initVm.call(this, VueComponent) + didMount () { + if (my.dd) { // 钉钉小程序底层基础库有 bug,组件嵌套使用时,在 didMount 中无法及时调用 props 中的方法 + setTimeout(() => { + initVm.call(this, VueComponent) + }, 4) + } else { + initVm.call(this, VueComponent) + } initSpecialMethods(this) diff --git a/src/platforms/mp-alipay/runtime/wrapper/util.js b/src/platforms/mp-alipay/runtime/wrapper/util.js index 06594763..471b0f72 100644 --- a/src/platforms/mp-alipay/runtime/wrapper/util.js +++ b/src/platforms/mp-alipay/runtime/wrapper/util.js @@ -16,8 +16,7 @@ const customize = cached((str) => { return camelize(str.replace(customizeRE, '-')) }) -// 钉钉小程序是 component2 模式 -export const isComponent2 = my.dd || my.canIUse('component2') +export const isComponent2 = my.canIUse('component2') export const mocks = ['$id'] diff --git a/src/platforms/mp-weixin/runtime/wrapper/app-base-parser.js b/src/platforms/mp-weixin/runtime/wrapper/app-base-parser.js index 6e16203b..2a05720f 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/app-base-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/app-base-parser.js @@ -52,7 +52,7 @@ export default function parseBaseApp (vm, { if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 return } - if (__PLATFORM__ === 'mp-weixin') { + if (__PLATFORM__ === 'mp-weixin' || __PLATFORM__ === 'mp-qq') { if (!wx.canIUse('nextTick')) { // 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断 console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上') } diff --git a/src/platforms/mp-weixin/runtime/wrapper/component-base-parser.js b/src/platforms/mp-weixin/runtime/wrapper/component-base-parser.js index 23a569e1..e560022d 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/component-base-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/component-base-parser.js @@ -26,8 +26,8 @@ export default function parseBaseComponent (vueComponentOptions, { addGlobalClass: true } - if (__PLATFORM__ === 'mp-weixin') { - // 微信multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项 + if (__PLATFORM__ === 'mp-weixin' || __PLATFORM__ === 'mp-qq') { + // 微信 multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项 if (vueOptions['mp-weixin'] && vueOptions['mp-weixin']['options']) { Object.assign(options, vueOptions['mp-weixin']['options']) } -- GitLab