Skip to content

Commit

Permalink
fix(core): fix page initData
Browse files Browse the repository at this point in the history
  • Loading branch information
allen-zh committed Oct 24, 2019
1 parent 17e4ca3 commit f735d2d
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 20 deletions.
34 changes: 22 additions & 12 deletions packages/mars-core/src/base/createComponent.js
Expand Up @@ -41,7 +41,12 @@ function mountVue(VueComponent, setData) {
}
else {
const vmList = rootMp.$vue.__vms__[parentCompid];
parent = vmList[vmList.cur];
if (!vmList) {
console.warn('cannot find Vue parent component for: ', this);
}
else {
parent = vmList[vmList.cur];
}
}

const options = {
Expand Down Expand Up @@ -162,18 +167,23 @@ export function makeCreateComponent(handleProxy, handleModel, setData, callHook,
console.log('[debug: mp lifetimes] detached', this.data.compId);
}
callHook.call(this, this.$vue, 'comp', 'detached', args);
this.$vue && this.$vue.$destroy();
// remove swan binded vue instance from root __vms__
const page = this.$$__page__;
const vms = page.$vue.__vms__;
const vmData = vms[this.data.compId];
const curSwan = this.__curSwan__;
if (vms && vmData && vmData[curSwan]) {
vmData[curSwan] = null;
delete vmData[curSwan];
try {
this.$vue && this.$vue.$destroy();
// remove swan binded vue instance from root __vms__
const page = this.$$__page__;
const vms = page.$vue.__vms__;
const vmData = vms[this.data.compId];
const curSwan = this.__curSwan__;
if (vms && vmData && vmData[curSwan]) {
vmData[curSwan] = null;
delete vmData[curSwan];
}
delete this.$vue;
delete this.$$__page__;
}
catch (e) {
console.warn('component detached error', e, this);
}
delete this.$vue;
delete this.$$__page__;
}
}
};
Expand Down
10 changes: 8 additions & 2 deletions packages/mars-core/src/base/createPage.js
Expand Up @@ -71,15 +71,21 @@ export function mountVue(vm) {
}
}

export function makeCreatePage(pageMixin, {handleProxy, handleModel}, setData, callHook) {
export function makeCreatePage(pageMixin, {handleProxy, handleModel}, setData, callHook, {
$api
}) {
return function (options) {
options.mixins = [pageMixin];

let initData = typeof options.data === 'function' ? options.data.call({
$api
}) : (options.data || {});

return {
$$__createVue__() {
return createVue.call(this, options, [], {setData});
},
data: {},
data: initData,
handleProxy,
handleModel,
onLoad(...args) {
Expand Down
4 changes: 3 additions & 1 deletion packages/mars-core/src/swan/createComponent.js
Expand Up @@ -27,5 +27,7 @@ export default makeCreateComponent(
handleModel,
setData,
callHook,
{$api}
{
$api
}
);
17 changes: 13 additions & 4 deletions packages/mars-core/src/swan/createPage.js
Expand Up @@ -10,8 +10,17 @@ import pageMixin, {handleProxy, handleModel} from './mixins';
import {makeCreatePage} from '../base/createPage';
import {setData} from './data';
import {callHook} from './lifecycle';
import $api from './nativeAPI';

export default makeCreatePage(pageMixin, {
handleProxy,
handleModel
}, setData, callHook);
export default makeCreatePage(
pageMixin,
{
handleProxy,
handleModel
},
setData,
callHook,
{
$api
}
);
7 changes: 6 additions & 1 deletion packages/mars-core/src/wx/createPage.js
Expand Up @@ -9,6 +9,7 @@
import pageMixin, {handleProxy, handleModel} from './mixins';
import {setData} from './data';
import {callHook} from './lifecycle';
import $api from './nativeAPI';

import Vue from '../base/vue/index';
import {state} from '../base/state';
Expand All @@ -20,8 +21,12 @@ function makeCreatePage(pageMixin, {handleProxy, handleModel}, setData, callHook
return function (options) {
options.mixins = [pageMixin];

let initData = typeof options.data === 'function' ? options.data.call({
$api
}) : (options.data || {});

return {
data: {},
data: initData,
lifetimes: {
attached(...args) {
createVue.call(this, options, args, {setData});
Expand Down

0 comments on commit f735d2d

Please sign in to comment.