diff --git a/packages/uni-app-plus/dist/index.js b/packages/uni-app-plus/dist/index.js index 9b0680a72e36ed751e9e933ccc054d6a45a88ffb..0547d3a2053961bc67cd3482c93b16592f125b8b 100644 --- a/packages/uni-app-plus/dist/index.js +++ b/packages/uni-app-plus/dist/index.js @@ -245,7 +245,7 @@ function isSyncApi (name) { } function isCallbackApi (name) { - return CALLBACK_API_RE.test(name) + return CALLBACK_API_RE.test(name) && name !== 'onPush' } function handlePromise (promise) { @@ -1287,11 +1287,13 @@ function parseBaseComponent (vueComponentOptions, { } = {}) { let [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions); + const options = { + multipleSlots: true, + addGlobalClass: true + }; + const componentOptions = { - options: { - multipleSlots: true, - addGlobalClass: true - }, + options, data: initData(vueOptions, Vue.prototype), behaviors: initBehaviors(vueOptions, initBehavior), properties: initProperties(vueOptions.props, false, vueOptions.__file), diff --git a/packages/uni-mp-alipay/dist/index.js b/packages/uni-mp-alipay/dist/index.js index 99b7f07c4d404a07256afc906f740f6552f82ddc..e943e93a07290c56ba21133a2cd567f34edfc6c8 100644 --- a/packages/uni-mp-alipay/dist/index.js +++ b/packages/uni-mp-alipay/dist/index.js @@ -245,7 +245,7 @@ function isSyncApi (name) { } function isCallbackApi (name) { - return CALLBACK_API_RE.test(name) + return CALLBACK_API_RE.test(name) && name !== 'onPush' } function handlePromise (promise) { @@ -1665,9 +1665,10 @@ const customizeRE = /:/g; const customize = cached((str) => { return camelize(str.replace(customizeRE, '-')) -}); +}); -const isComponent2 = my.canIUse('component2'); +// 钉钉小程序是 component2 模式 +const isComponent2 = my.dd || my.canIUse('component2'); const mocks = ['$id']; diff --git a/packages/uni-mp-baidu/dist/index.js b/packages/uni-mp-baidu/dist/index.js index 7174e4e67d995244817268fd03cca28a42ed1bfb..81a9ad4803a26c93054f90cc840b1a8267c7a5db 100644 --- a/packages/uni-mp-baidu/dist/index.js +++ b/packages/uni-mp-baidu/dist/index.js @@ -245,7 +245,7 @@ function isSyncApi (name) { } function isCallbackApi (name) { - return CALLBACK_API_RE.test(name) + return CALLBACK_API_RE.test(name) && name !== 'onPush' } function handlePromise (promise) { @@ -1420,11 +1420,13 @@ function parseBaseComponent (vueComponentOptions, { } = {}) { let [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions); + const options = { + multipleSlots: true, + addGlobalClass: true + }; + const componentOptions = { - options: { - multipleSlots: true, - addGlobalClass: true - }, + options, data: initData(vueOptions, Vue.prototype), behaviors: initBehaviors(vueOptions, initBehavior), properties: initProperties(vueOptions.props, false, vueOptions.__file), @@ -1505,23 +1507,29 @@ function parseComponent (vueOptions) { const componentOptions = parseBaseComponent(vueOptions, { isPage, initRelation - }); - + }); + + // 关于百度小程序新生命周期(2.0)的说明(组件作为页面时): + // lifetimes:attached --> methods:onShow --> methods:onLoad --> methods:onReady + // 这里在新生命周期强制将onShow挪到onLoad之后触发,另外一处修改在page-parser.js const oldAttached = componentOptions.lifetimes.attached; - componentOptions.lifetimes.attached = function attached () { oldAttached.call(this); if (isPage.call(this)) { // 百度 onLoad 在 attached 之前触发 // 百度 当组件作为页面时 pageinstancce 不是原来组件的 instance this.pageinstance.$vm = this.$vm; - if (hasOwn(this.pageinstance, '_$args')) { this.$vm.$mp.query = this.pageinstance._$args; - this.$vm.__call_hook('onLoad', this.pageinstance._$args); + this.$vm.__call_hook('onLoad', this.pageinstance._$args); + this.$vm.__call_hook('onShow'); delete this.pageinstance._$args; } - // TODO 3.105.17以下基础库内百度 Component 作为页面时,methods 中的 onShow 不触发 - !newLifecycle && this.$vm.__call_hook('onShow'); + } else { + // 百度小程序组件不触发methods内的onReady + if (this.$vm) { + this.$vm._isMounted = true; + this.$vm.__call_hook('mounted'); + } } }; @@ -1588,13 +1596,21 @@ function parsePage (vuePageOptions) { initRelation }); + const newLifecycle = swan.canIUse('lifecycle-2-0'); + + // 纠正百度小程序新生命周期(2.0)methods:onShow在methods:onLoad之前触发的问题 + if (newLifecycle) { + delete pageOptions.methods.onShow; + } + pageOptions.methods.onLoad = function onLoad (args) { // 百度 onLoad 在 attached 之前触发,先存储 args, 在 attached 里边触发 onLoad - if (this.$vm) { - this.$vm.$mp.query = args; - this.$vm.__call_hook('onLoad', args); - } else { - this.pageinstance._$args = args; + if (this.$vm) { + this.$vm.$mp.query = args; + this.$vm.__call_hook('onLoad', args); + this.$vm.__call_hook('onShow'); + } else { + this.pageinstance._$args = args; } }; diff --git a/packages/uni-mp-qq/dist/index.js b/packages/uni-mp-qq/dist/index.js index dd5be408fefaf6cadbe82d542a77335c80f9445a..550c5722ed4e16844508949ec41b414ee21b033e 100644 --- a/packages/uni-mp-qq/dist/index.js +++ b/packages/uni-mp-qq/dist/index.js @@ -245,7 +245,7 @@ function isSyncApi (name) { } function isCallbackApi (name) { - return CALLBACK_API_RE.test(name) + return CALLBACK_API_RE.test(name) && name !== 'onPush' } function handlePromise (promise) { @@ -1334,11 +1334,13 @@ function parseBaseComponent (vueComponentOptions, { } = {}) { let [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions); + const options = { + multipleSlots: true, + addGlobalClass: true + }; + const componentOptions = { - options: { - multipleSlots: true, - addGlobalClass: true - }, + options, data: initData(vueOptions, Vue.prototype), behaviors: initBehaviors(vueOptions, initBehavior), properties: initProperties(vueOptions.props, false, vueOptions.__file), diff --git a/packages/uni-mp-toutiao/dist/index.js b/packages/uni-mp-toutiao/dist/index.js index d38842444e9b7a742b12d48696e9f8a081604c97..03827351fb09c745ecc283ff36cf83630885457d 100644 --- a/packages/uni-mp-toutiao/dist/index.js +++ b/packages/uni-mp-toutiao/dist/index.js @@ -245,7 +245,7 @@ function isSyncApi (name) { } function isCallbackApi (name) { - return CALLBACK_API_RE.test(name) + return CALLBACK_API_RE.test(name) && name !== 'onPush' } function handlePromise (promise) { @@ -1511,11 +1511,13 @@ function parseBaseComponent (vueComponentOptions, { } = {}) { let [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions); + const options = { + multipleSlots: true, + addGlobalClass: true + }; + const componentOptions = { - options: { - multipleSlots: true, - addGlobalClass: true - }, + options, data: initData(vueOptions, Vue.prototype), behaviors: initBehaviors(vueOptions, initBehavior), properties: initProperties(vueOptions.props, false, vueOptions.__file), diff --git a/packages/uni-mp-weixin/dist/index.js b/packages/uni-mp-weixin/dist/index.js index 9cf688e2952aa23f4c81e519c8e766b003138418..019d35b675b77f51992de8b878212a3596039f8c 100644 --- a/packages/uni-mp-weixin/dist/index.js +++ b/packages/uni-mp-weixin/dist/index.js @@ -245,7 +245,7 @@ function isSyncApi (name) { } function isCallbackApi (name) { - return CALLBACK_API_RE.test(name) + return CALLBACK_API_RE.test(name) && name !== 'onPush' } function handlePromise (promise) { @@ -1275,11 +1275,20 @@ function parseBaseComponent (vueComponentOptions, { } = {}) { let [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions); + const options = { + multipleSlots: true, + addGlobalClass: true + }; + + { + // 微信multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项 + if (vueOptions['mp-weixin'] && vueOptions['mp-weixin']['options']) { + Object.assign(options, vueOptions['mp-weixin']['options']); + } + } + const componentOptions = { - options: { - multipleSlots: true, - addGlobalClass: true - }, + options, data: initData(vueOptions, Vue.prototype), behaviors: initBehaviors(vueOptions, initBehavior), properties: initProperties(vueOptions.props, false, vueOptions.__file), diff --git a/src/platforms/mp-alipay/runtime/wrapper/util.js b/src/platforms/mp-alipay/runtime/wrapper/util.js index 30ea330bc336d6e36b5b5837f6dc6bb12155f09d..0659476397d9c809ae034c7a4fe4b62ed9d41f6f 100644 --- a/src/platforms/mp-alipay/runtime/wrapper/util.js +++ b/src/platforms/mp-alipay/runtime/wrapper/util.js @@ -14,9 +14,10 @@ const customizeRE = /:/g const customize = cached((str) => { return camelize(str.replace(customizeRE, '-')) -}) +}) -export const isComponent2 = my.canIUse('component2') +// 钉钉小程序是 component2 模式 +export const isComponent2 = my.dd || my.canIUse('component2') export const mocks = ['$id']