提交 0dfaf75e 编写于 作者: Q qiang

fix(mp-toutiao): 修复字节小程序基础库 2.0+ 组件关系错乱的问题 fixed #2651

上级 c5db51ea
......@@ -11,34 +11,49 @@ import {
import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-base-parser'
const components = []
export default function parseComponent (vueOptions) {
const [componentOptions, VueComponent] = parseBaseComponent(vueOptions)
// 基础库 2.0 以上 attached 顺序错乱,按照 created 顺序强制纠正
componentOptions.lifetimes.created = function created () {
components.push(this)
}
componentOptions.lifetimes.attached = function attached () {
const properties = this.properties
this.__lifetimes_attached = function () {
const properties = this.properties
const options = {
mpType: isPage.call(this) ? 'page' : 'component',
mpInstance: this,
propsData: properties
}
const options = {
mpType: isPage.call(this) ? 'page' : 'component',
mpInstance: this,
propsData: properties
}
initVueIds(properties.vueId, this)
initVueIds(properties.vueId, this)
// 初始化 vue 实例
this.$vm = new VueComponent(options)
// 初始化 vue 实例
this.$vm = new VueComponent(options)
// 处理$slots,$scopedSlots(暂不支持动态变化$slots)
initSlots(this.$vm, properties.vueSlots)
// 处理$slots,$scopedSlots(暂不支持动态变化$slots)
initSlots(this.$vm, properties.vueSlots)
// 处理父子关系
initRelation.call(this, {
vuePid: this._$vuePid,
mpInstance: this
})
// 处理父子关系
initRelation.call(this, {
vuePid: this._$vuePid,
mpInstance: this
})
// 触发首次 setData
this.$vm.$mount()
// 触发首次 setData
this.$vm.$mount()
}
let component = this
while (component && component.__lifetimes_attached && components[0] && component === components[0]) {
components.shift()
component.__lifetimes_attached()
component = components[0]
}
}
// ready 比 handleLink 还早,初始化逻辑放到 handleLink 中
......@@ -47,4 +62,4 @@ export default function parseComponent (vueOptions) {
componentOptions.methods.__l = handleLink
return componentOptions
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册