提交 d6f6befa 编写于 作者: Q qiang

fix(mp-kuaishou): 修复快手小程序部分情况数据无法更新的问题

上级 a2794392
......@@ -16,6 +16,11 @@ import {
initMocks
} from 'uni-wrapper/util'
import {
fixSetDataStart,
fixSetDataEnd
} from '../../../mp-weixin/runtime/wrapper/fix-set-data'
import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-base-parser'
const newLifecycle = swan.canIUse('lifecycle-2-0')
......@@ -39,22 +44,7 @@ export default function parseComponent (vueOptions) {
}
// 处理百度小程序 onInit 生命周期调用 setData 无效的问题
const setData = this.setData
const setDataArgs = []
this.setData = function () {
setDataArgs.push(arguments)
}
this.__fixInitData = function () {
delete this.__fixInitData
this.setData = setData
if (setDataArgs.length) {
this.groupSetData(() => {
setDataArgs.forEach(args => {
setData.apply(this, args)
})
})
}
}
fixSetDataStart(this)
oldAttached.call(this)
this.pageinstance.$vm = this.$vm
this.$vm.__call_hook('onInit', query)
......@@ -64,7 +54,7 @@ export default function parseComponent (vueOptions) {
oldAttached.call(this)
} else {
initMocks(this.$vm, mocks)
this.__fixInitData && this.__fixInitData()
fixSetDataEnd(this)
}
if (isPage.call(this)) { // 百度 onLoad 在 attached 之前触发(基础库小于 3.70)
// 百度 当组件作为页面时 pageinstancce 不是原来组件的 instance
......
import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-parser'
import { isPage } from '../../../mp-weixin/runtime/wrapper/util'
import {
fixSetDataStart,
fixSetDataEnd
} from '../../../mp-weixin/runtime/wrapper/fix-set-data'
const SDKVersion = __GLOBAL__.getSystemInfoSync().SDKVersion
export default function parseComponent (vueComponentOptions) {
return parseBaseComponent(vueComponentOptions)
const componentOptions = parseBaseComponent(vueComponentOptions)
const oldAttached = componentOptions.lifetimes.attached
componentOptions.lifetimes.attached = function attached () {
if (isPage.call(this) && parseFloat(SDKVersion) <= 1.13) {
// 解决快手小程序页面 attached 生命周期 setData 导致数据同步异常的问题
fixSetDataStart(this)
setTimeout(() => {
fixSetDataEnd(this)
}, 0)
}
oldAttached.call(this)
}
return componentOptions
}
/**
* 用于延迟调用 setData
* 在 setData 真实调用的时机需执行 fixSetDataEnd
* @param {*} mpInstance
*/
export 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
*/
export function fixSetDataEnd (mpInstance) {
if (mpInstance.__fixInitData) {
mpInstance.__fixInitData()
delete mpInstance.__fixInitData
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册