提交 0cbbe295 编写于 作者: fxy060608's avatar fxy060608

feat(runtime): 优化 mp-weixin 生命周期

上级 d7b00708
......@@ -618,6 +618,10 @@ function createApp (vueOptions) {
initRefs(this);
initMocks(this);
}
},
created () { // 处理 injections
this.__init_injections(this);
this.__init_provide(this);
}
});
......@@ -697,9 +701,12 @@ function createPage (vueOptions) {
this.$vm = new Vue(Object.assign(vueOptions, {
mpType: 'page',
mpInstance: this
}));
}));
this.$vm.__call_hook('created');
this.$vm.$mount();
this.$vm.$mount();
this.$vm.__call_hook('onLoad', args);
},
onReady () {
......@@ -722,16 +729,16 @@ function createPage (vueOptions) {
return Page(pageOptions)
}
function initVueComponent (mpInstace, VueComponent) {
function initVueComponent (mpInstace, VueComponent, extraOptions = {}) {
if (mpInstace.$vm) {
return
}
const options = {
const options = Object.assign({
mpType: 'component',
mpInstance: mpInstace,
propsData: mpInstace.properties
};
}, extraOptions);
// 初始化 vue 实例
mpInstace.$vm = new VueComponent(options);
......@@ -744,9 +751,6 @@ function initVueComponent (mpInstace, VueComponent) {
});
mpInstace.$vm.$scopedSlots = mpInstace.$vm.$slots = $slots;
}
// 初始化渲染数据
mpInstace.$vm.$mount();
}
function createComponent (vueOptions) {
......@@ -769,22 +773,11 @@ function createComponent (vueOptions) {
},
ready () {
initVueComponent(this, VueComponent); // 目前发现部分情况小程序 attached 不触发
triggerLink(this); // 处理 parent,children
triggerLink(this);
const eventId = this.dataset.eventId;
if (eventId) {
const listeners = this.$vm.$parent.$mp.listeners;
if (listeners) {
const listenerOpts = listeners[eventId];
Object.keys(listenerOpts).forEach(eventType => {
listenerOpts[eventType].forEach(handler => {
this.$vm[handler.once ? '$once' : '$on'](eventType, handler);
});
});
}
}
// 初始化渲染数据(需要等 parent,inject 都初始化完成,否则可以放到 attached 里边初始化渲染)
this.$vm.__call_hook('created');
this.$vm.$mount();
this.$vm._isMounted = true;
this.$vm.__call_hook('mounted');
this.$vm.__call_hook('onReady');
......@@ -801,10 +794,10 @@ function createComponent (vueOptions) {
this.$vm.__call_hook('onPageShow', args);
},
hide () {
this.$vm.__call_hook('onPageHide');
this.$vm && this.$vm.__call_hook('onPageHide');
},
resize (size) {
this.$vm.__call_hook('onPageResize', size);
this.$vm && this.$vm.__call_hook('onPageResize', size);
}
},
methods: {
......
{
"name": "@dcloudio/uni-mp-baidu",
"version": "0.0.809",
"version": "0.0.810",
"description": "uni-app mp-baidu",
"main": "dist/index.js",
"scripts": {
......
......@@ -643,6 +643,10 @@ function createApp (vueOptions) {
initRefs(this);
initMocks(this);
}
},
created () { // 处理 injections
this.__init_injections(this);
this.__init_provide(this);
}
});
......@@ -721,9 +725,12 @@ function createPage (vueOptions) {
this.$vm = new Vue(Object.assign(vueOptions, {
mpType: 'page',
mpInstance: this
}));
}));
this.$vm.__call_hook('created');
this.$vm.$mount();
this.$vm.$mount();
this.$vm.__call_hook('onLoad', args);
},
onReady () {
......@@ -746,16 +753,16 @@ function createPage (vueOptions) {
return Page(pageOptions)
}
function initVueComponent (mpInstace, VueComponent) {
function initVueComponent (mpInstace, VueComponent, extraOptions = {}) {
if (mpInstace.$vm) {
return
}
const options = {
const options = Object.assign({
mpType: 'component',
mpInstance: mpInstace,
propsData: mpInstace.properties
};
}, extraOptions);
// 初始化 vue 实例
mpInstace.$vm = new VueComponent(options);
......@@ -768,9 +775,6 @@ function initVueComponent (mpInstace, VueComponent) {
});
mpInstace.$vm.$scopedSlots = mpInstace.$vm.$slots = $slots;
}
// 初始化渲染数据
mpInstace.$vm.$mount();
}
function createComponent (vueOptions) {
......@@ -793,22 +797,11 @@ function createComponent (vueOptions) {
},
ready () {
initVueComponent(this, VueComponent); // 目前发现部分情况小程序 attached 不触发
triggerLink(this); // 处理 parent,children
triggerLink(this);
const eventId = this.dataset.eventId;
if (eventId) {
const listeners = this.$vm.$parent.$mp.listeners;
if (listeners) {
const listenerOpts = listeners[eventId];
Object.keys(listenerOpts).forEach(eventType => {
listenerOpts[eventType].forEach(handler => {
this.$vm[handler.once ? '$once' : '$on'](eventType, handler);
});
});
}
}
// 初始化渲染数据(需要等 parent,inject 都初始化完成,否则可以放到 attached 里边初始化渲染)
this.$vm.__call_hook('created');
this.$vm.$mount();
this.$vm._isMounted = true;
this.$vm.__call_hook('mounted');
this.$vm.__call_hook('onReady');
......@@ -822,10 +815,10 @@ function createComponent (vueOptions) {
this.$vm.__call_hook('onPageShow', args);
},
hide () {
this.$vm.__call_hook('onPageHide');
this.$vm && this.$vm.__call_hook('onPageHide');
},
resize (size) {
this.$vm.__call_hook('onPageResize', size);
this.$vm && this.$vm.__call_hook('onPageResize', size);
}
},
methods: {
......
{
"name": "@dcloudio/uni-mp-toutiao",
"version": "0.0.305",
"version": "0.0.306",
"description": "uni-app mp-toutiao",
"main": "dist/index.js",
"scripts": {
......
......@@ -485,6 +485,10 @@ function createApp (vueOptions) {
initRefs(this);
initMocks(this);
}
},
created () { // 处理 injections
this.__init_injections(this);
this.__init_provide(this);
}
});
......@@ -507,19 +511,25 @@ function createApp (vueOptions) {
return vueOptions
}
function triggerLink (mpInstance) {
mpInstance.triggerEvent('__l', mpInstance.$vm, {
function triggerLink (mpInstance, vueOptions) {
mpInstance.triggerEvent('__l', mpInstance.$vm || vueOptions, {
bubbles: true,
composed: true
});
}
function handleLink (event) {
if (!event.detail.$parent) {
event.detail.$parent = this.$vm;
event.detail.$parent.$children.push(event.detail);
if (event.detail.$mp) { // vm
if (!event.detail.$parent) {
event.detail.$parent = this.$vm;
event.detail.$parent.$children.push(event.detail);
event.detail.$root = this.$vm.$root;
event.detail.$root = this.$vm.$root;
}
} else { // vueOptions
if (!event.detail.parent) {
event.detail.parent = this.$vm;
}
}
}
......@@ -548,9 +558,12 @@ function createPage (vueOptions) {
this.$vm = new Vue(Object.assign(vueOptions, {
mpType: 'page',
mpInstance: this
}));
}));
this.$vm.__call_hook('created');
this.$vm.$mount();
this.$vm.$mount();
this.$vm.__call_hook('onLoad', args);
},
onReady () {
......@@ -573,16 +586,16 @@ function createPage (vueOptions) {
return Page(pageOptions)
}
function initVueComponent (mpInstace, VueComponent) {
function initVueComponent (mpInstace, VueComponent, extraOptions = {}) {
if (mpInstace.$vm) {
return
}
const options = {
const options = Object.assign({
mpType: 'component',
mpInstance: mpInstace,
propsData: mpInstace.properties
};
}, extraOptions);
// 初始化 vue 实例
mpInstace.$vm = new VueComponent(options);
......@@ -595,9 +608,6 @@ function initVueComponent (mpInstace, VueComponent) {
});
mpInstace.$vm.$scopedSlots = mpInstace.$vm.$slots = $slots;
}
// 初始化渲染数据
mpInstace.$vm.$mount();
}
function createComponent (vueOptions) {
......@@ -620,22 +630,11 @@ function createComponent (vueOptions) {
},
ready () {
initVueComponent(this, VueComponent); // 目前发现部分情况小程序 attached 不触发
triggerLink(this); // 处理 parent,children
triggerLink(this);
const eventId = this.dataset.eventId;
if (eventId) {
const listeners = this.$vm.$parent.$mp.listeners;
if (listeners) {
const listenerOpts = listeners[eventId];
Object.keys(listenerOpts).forEach(eventType => {
listenerOpts[eventType].forEach(handler => {
this.$vm[handler.once ? '$once' : '$on'](eventType, handler);
});
});
}
}
// 初始化渲染数据(需要等 parent,inject 都初始化完成,否则可以放到 attached 里边初始化渲染)
this.$vm.__call_hook('created');
this.$vm.$mount();
this.$vm._isMounted = true;
this.$vm.__call_hook('mounted');
this.$vm.__call_hook('onReady');
......@@ -649,10 +648,10 @@ function createComponent (vueOptions) {
this.$vm.__call_hook('onPageShow', args);
},
hide () {
this.$vm.__call_hook('onPageHide');
this.$vm && this.$vm.__call_hook('onPageHide');
},
resize (size) {
this.$vm.__call_hook('onPageResize', size);
this.$vm && this.$vm.__call_hook('onPageResize', size);
}
},
methods: {
......
{
"name": "@dcloudio/uni-mp-weixin",
"version": "0.0.909",
"version": "0.0.910",
"description": "uni-app mp-weixin",
"main": "dist/index.js",
"scripts": {
......
......@@ -33,6 +33,10 @@ export function createApp (vueOptions) {
initRefs(this)
initMocks(this)
}
},
created () { // 处理 injections
this.__init_injections(this)
this.__init_provide(this)
}
})
......
......@@ -11,16 +11,16 @@ import {
getProperties
} from './util'
function initVueComponent (mpInstace, VueComponent) {
function initVueComponent (mpInstace, VueComponent, extraOptions = {}) {
if (mpInstace.$vm) {
return
}
const options = {
const options = Object.assign({
mpType: 'component',
mpInstance: mpInstace,
propsData: mpInstace.properties
}
}, extraOptions)
// 初始化 vue 实例
mpInstace.$vm = new VueComponent(options)
......@@ -33,9 +33,6 @@ function initVueComponent (mpInstace, VueComponent) {
})
mpInstace.$vm.$scopedSlots = mpInstace.$vm.$slots = $slots
}
// 初始化渲染数据
mpInstace.$vm.$mount()
}
export function createComponent (vueOptions) {
......@@ -58,22 +55,11 @@ export function createComponent (vueOptions) {
},
ready () {
initVueComponent(this, VueComponent) // 目前发现部分情况小程序 attached 不触发
triggerLink(this) // 处理 parent,children
triggerLink(this)
const eventId = this.dataset.eventId
if (eventId) {
const listeners = this.$vm.$parent.$mp.listeners
if (listeners) {
const listenerOpts = listeners[eventId]
Object.keys(listenerOpts).forEach(eventType => {
listenerOpts[eventType].forEach(handler => {
this.$vm[handler.once ? '$once' : '$on'](eventType, handler)
})
})
}
}
// 初始化渲染数据(需要等 parent,inject 都初始化完成,否则可以放到 attached 里边初始化渲染)
this.$vm.__call_hook('created')
this.$vm.$mount()
this.$vm._isMounted = true
this.$vm.__call_hook('mounted')
this.$vm.__call_hook('onReady')
......@@ -90,10 +76,10 @@ export function createComponent (vueOptions) {
this.$vm.__call_hook('onPageShow', args)
},
hide () {
this.$vm.__call_hook('onPageHide')
this.$vm && this.$vm.__call_hook('onPageHide')
},
resize (size) {
this.$vm.__call_hook('onPageResize', size)
this.$vm && this.$vm.__call_hook('onPageResize', size)
}
},
methods: {
......
......@@ -39,9 +39,12 @@ export function createPage (vueOptions) {
this.$vm = new Vue(Object.assign(vueOptions, {
mpType: 'page',
mpInstance: this
}))
}))
this.$vm.__call_hook('created')
this.$vm.$mount()
this.$vm.$mount()
this.$vm.__call_hook('onLoad', args)
},
onReady () {
......
export function triggerLink (mpInstance) {
mpInstance.triggerEvent('__l', mpInstance.$vm, {
export function triggerLink (mpInstance, vueOptions) {
mpInstance.triggerEvent('__l', mpInstance.$vm || vueOptions, {
bubbles: true,
composed: true
})
}
export function handleLink (event) {
if (!event.detail.$parent) {
event.detail.$parent = this.$vm
event.detail.$parent.$children.push(event.detail)
if (event.detail.$mp) { // vm
if (!event.detail.$parent) {
event.detail.$parent = this.$vm
event.detail.$parent.$children.push(event.detail)
event.detail.$root = this.$vm.$root
event.detail.$root = this.$vm.$root
}
} else { // vueOptions
if (!event.detail.parent) {
event.detail.parent = this.$vm
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册