diff --git a/packages/uni-mp-baidu/dist/uni.api.esm.js b/packages/uni-mp-baidu/dist/uni.api.esm.js index d60c8db10911e460a176cdefa0cf33a1b63005d3..bebc81822fd5824d3b887812c61ff6bcf3959b4c 100644 --- a/packages/uni-mp-baidu/dist/uni.api.esm.js +++ b/packages/uni-mp-baidu/dist/uni.api.esm.js @@ -49,8 +49,8 @@ function onAppLaunch(hook) { swan.appLaunchHooks.push(hook); } -function getBaseSystemInfo() { - return swan.getSystemInfoSync() +function getBaseSystemInfo() { + return swan.getSystemInfoSync() } function validateProtocolFail(name, msg) { diff --git a/packages/uni-mp-baidu/dist/uni.mp.esm.js b/packages/uni-mp-baidu/dist/uni.mp.esm.js index 5b473541558e1131871df23c700e7f614dae98f2..52e50249108a3fc723ac86112124e834549b19b6 100644 --- a/packages/uni-mp-baidu/dist/uni.mp.esm.js +++ b/packages/uni-mp-baidu/dist/uni.mp.esm.js @@ -1179,6 +1179,45 @@ var parseAppOptions = /*#__PURE__*/Object.freeze({ parse: parse$2 }); +/** + * 用于延迟调用 setData + * 在 setData 真实调用的时机需执行 fixSetDataEnd + * @param {*} mpInstance + */ +function fixSetDataStart(mpInstance) { + const setData = mpInstance.setData; + const setDataArgs = []; + mpInstance.setData = function () { + setDataArgs.push(arguments); + }; + mpInstance.__fixInitData = function () { + this.setData = setData; + const fn = () => { + setDataArgs.forEach((args) => { + setData.apply(this, args); + }); + }; + if (setDataArgs.length) { + if (this.groupSetData) { + this.groupSetData(fn); + } + else { + fn(); + } + } + }; +} +/** + * 恢复真实的 setData 方法 + * @param {*} mpInstance + */ +function fixSetDataEnd(mpInstance) { + if (mpInstance.__fixInitData) { + mpInstance.__fixInitData(); + delete mpInstance.__fixInitData; + } +} + function initLifetimes({ mocks, isPage, initRelation, vueOptions, }) { return { attached() { @@ -1250,10 +1289,29 @@ function parse$1(componentOptions) { // lifetimes:attached --> methods:onShow --> methods:onLoad --> methods:onReady // 这里在强制将onShow挪到onLoad之后触发,另外一处修改在page-parser.js const oldAttached = lifetimes.attached; - lifetimes.attached = function attached() { + // 百度小程序基础库 3.260 以上支持页面 onInit 生命周期,提前创建 vm 实例 + lifetimes.onInit = function onInit(query) { + // 百度小程序后续可能移除 pageinstance 属性,为向后兼容进行补充 + if (!this.pageinstance || !this.pageinstance.setData) { + const pages = getCurrentPages(); + this.pageinstance = pages[pages.length - 1]; + } + // 处理百度小程序 onInit 生命周期调用 setData 无效的问题 + fixSetDataStart(this); oldAttached.call(this); + this.pageinstance.$vm = this.$vm; + this.$vm.__call_hook('onInit', query); + }; + lifetimes.attached = function attached() { + if (!this.$vm) { + oldAttached.call(this); + } + else { + initMocks(this.$vm.$, this, mocks); + fixSetDataEnd(this); + } if (isPage(this) && this.$vm) { - // 百度 onLoad 在 attached 之前触发 + // 百度 onLoad 在 attached 之前触发(基础库小于 3.70) // 百度 当组件作为页面时 pageinstance 不是原来组件的 instance const pageInstance = this.pageinstance; pageInstance.$vm = this.$vm; diff --git a/packages/uni-mp-baidu/src/runtime/parseComponentOptions.ts b/packages/uni-mp-baidu/src/runtime/parseComponentOptions.ts index 800b4edb5b1fbedfddf619302e950d215597f813..2fc0929da790e90caf3f249b87c47a1afaaed0aa 100644 --- a/packages/uni-mp-baidu/src/runtime/parseComponentOptions.ts +++ b/packages/uni-mp-baidu/src/runtime/parseComponentOptions.ts @@ -1,7 +1,15 @@ import { hasOwn } from '@vue/shared' -import { MPComponentInstance, MPComponentOptions } from '@dcloudio/uni-mp-core' +import { + MPComponentInstance, + MPComponentOptions, + initMocks, +} from '@dcloudio/uni-mp-core' import { ON_LOAD, ON_SHOW } from '@dcloudio/uni-shared' +import { + fixSetDataStart, + fixSetDataEnd, +} from '../../../uni-mp-weixin/src/runtime/fixSetData' export { handleLink, initLifetimes } from '@dcloudio/uni-mp-weixin' @@ -28,10 +36,29 @@ export function parse(componentOptions: MPComponentOptions) { // lifetimes:attached --> methods:onShow --> methods:onLoad --> methods:onReady // 这里在强制将onShow挪到onLoad之后触发,另外一处修改在page-parser.js const oldAttached = lifetimes.attached - lifetimes.attached = function attached(this: MPComponentInstance) { + // 百度小程序基础库 3.260 以上支持页面 onInit 生命周期,提前创建 vm 实例 + lifetimes.onInit = function onInit(query: any) { + // 百度小程序后续可能移除 pageinstance 属性,为向后兼容进行补充 + if (!this.pageinstance || !this.pageinstance.setData) { + const pages = getCurrentPages() + this.pageinstance = pages[pages.length - 1] + } + + // 处理百度小程序 onInit 生命周期调用 setData 无效的问题 + fixSetDataStart(this as MPComponentInstance) oldAttached.call(this) + this.pageinstance.$vm = this.$vm + this.$vm.__call_hook('onInit', query) + } + lifetimes.attached = function attached(this: MPComponentInstance) { + if (!this.$vm) { + oldAttached.call(this) + } else { + initMocks(this.$vm.$, this, mocks) + fixSetDataEnd(this) + } if (isPage(this) && this.$vm) { - // 百度 onLoad 在 attached 之前触发 + // 百度 onLoad 在 attached 之前触发(基础库小于 3.70) // 百度 当组件作为页面时 pageinstance 不是原来组件的 instance const pageInstance = (this as any).pageinstance pageInstance.$vm = this.$vm