From e8cf7689b05062ac848f8f4d1a67d5453000ac39 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Tue, 16 Jul 2019 13:58:04 +0800 Subject: [PATCH] feat(app-plus-nvue): add registerConfig --- build/rollup.config.service.js | 3 +- packages/uni-app-plus-nvue/dist/index.js | 73 ++++++++++++++++--- packages/uni-app-plus-nvue/dist/uni.js | 2 +- .../app-plus-nvue/service/{ => uni}/router.js | 0 .../service => app-plus/service/uni}/app.js | 2 +- src/platforms/app-plus/service/uni/config.js | 22 ++++++ .../service/uni/create-instance-context.js | 42 +++++++---- .../service => app-plus/service/uni}/page.js | 4 +- 8 files changed, 116 insertions(+), 32 deletions(-) rename src/platforms/app-plus-nvue/service/{ => uni}/router.js (100%) rename src/platforms/{app-plus-nvue/service => app-plus/service/uni}/app.js (73%) create mode 100644 src/platforms/app-plus/service/uni/config.js rename src/platforms/{app-plus-nvue/service => app-plus/service/uni}/page.js (87%) diff --git a/build/rollup.config.service.js b/build/rollup.config.service.js index f6ab512ad..32e9e6bfd 100644 --- a/build/rollup.config.service.js +++ b/build/rollup.config.service.js @@ -16,7 +16,8 @@ if (process.env.UNI_SERVICE === 'legacy') { } else if (process.env.UNI_SERVICE === 'uni') { input = 'src/platforms/app-plus/service/uni/index.js' output.file = 'packages/uni-app-plus-nvue/dist/uni.js' - output.banner = 'export function createUniInstance(plus){\n' + output.banner = + 'export function createUniInstance(weex, plus, __uniConfig, __uniRoutes, getApp, getCurrentPages){\n' output.footer = '\n return uni$1 \n}' } diff --git a/packages/uni-app-plus-nvue/dist/index.js b/packages/uni-app-plus-nvue/dist/index.js index 30b4d7d4c..1e82232cc 100644 --- a/packages/uni-app-plus-nvue/dist/index.js +++ b/packages/uni-app-plus-nvue/dist/index.js @@ -61,28 +61,77 @@ const pageVms = []; function getCurrentPages () { return pageVms +} +/** + * @param {Object} pageVm + * + * page.beforeCreate 时添加 page + * page.beforeDestroy 时移出 page + * + * page.viewappear onShow + * page.viewdisappear onHide + * + * navigateTo + * redirectTo + * + * + * + * + * + * + */ +function registerPage (pageVm) { + pageVms.push(pageVm); } -const __uniConfig = Object.create(null); -const __uniRoutes = []; +const uniConfig = Object.create(null); +const uniRoutes = []; + +function parseRoutes (config) { + uniRoutes.length = 0; + /* eslint-disable no-mixed-operators */ + const tabBarList = (config.tabBar && config.tabBar.list || []).map(item => item.pagePath); + + Object.keys(config.page).forEach(function (pagePath) { + uniRoutes.push({ + path: '/' + pagePath, + meta: { + isTabBar: tabBarList.indexOf(pagePath) !== -1 + } + }); + }); +} +function registerConfig (config) { + Object.assign(uniConfig, config); + parseRoutes(uniConfig); +} + function createInstanceContext ({ weex, WeexPlus }) { const plus = new WeexPlus(weex); return { - __uniConfig, - __uniRoutes, - __registerApp (appVm, { - uniConfig, - uniRoutes - }) { - Object.assign(__uniConfig, uniConfig); - uniRoutes.forEach(route => __uniRoutes.push(route)); - registerApp(appVm, __uniRoutes, plus); + __uniConfig: uniConfig, + __uniRoutes: uniRoutes, + __registerConfig (config) { + registerConfig(config); + }, + __registerApp (appVm) { + registerApp(appVm, uniRoutes, plus); + }, + __registerPage (pageVm) { + registerPage(pageVm); }, - uni: createUniInstance(plus), + uni: createUniInstance( + weex, + plus, + __uniConfig, + __uniRoutes, + getApp, + getCurrentPages + ), getApp, getCurrentPages } diff --git a/packages/uni-app-plus-nvue/dist/uni.js b/packages/uni-app-plus-nvue/dist/uni.js index 554551d9d..bac3cfae5 100644 --- a/packages/uni-app-plus-nvue/dist/uni.js +++ b/packages/uni-app-plus-nvue/dist/uni.js @@ -1,4 +1,4 @@ -export function createUniInstance(plus){ +export function createUniInstance(weex, plus, __uniConfig, __uniRoutes, getApp, getCurrentPages){ const _toString = Object.prototype.toString; const hasOwnProperty = Object.prototype.hasOwnProperty; diff --git a/src/platforms/app-plus-nvue/service/router.js b/src/platforms/app-plus-nvue/service/uni/router.js similarity index 100% rename from src/platforms/app-plus-nvue/service/router.js rename to src/platforms/app-plus-nvue/service/uni/router.js diff --git a/src/platforms/app-plus-nvue/service/app.js b/src/platforms/app-plus/service/uni/app.js similarity index 73% rename from src/platforms/app-plus-nvue/service/app.js rename to src/platforms/app-plus/service/uni/app.js index a63cb89c4..123bd2be8 100644 --- a/src/platforms/app-plus-nvue/service/app.js +++ b/src/platforms/app-plus/service/uni/app.js @@ -1,4 +1,4 @@ -import Router from './router' +import Router from 'uni-platform/service/uni/router' let appCtx diff --git a/src/platforms/app-plus/service/uni/config.js b/src/platforms/app-plus/service/uni/config.js new file mode 100644 index 000000000..f5287356f --- /dev/null +++ b/src/platforms/app-plus/service/uni/config.js @@ -0,0 +1,22 @@ +export const uniConfig = Object.create(null) +export const uniRoutes = [] + +function parseRoutes (config) { + uniRoutes.length = 0 + /* eslint-disable no-mixed-operators */ + const tabBarList = (config.tabBar && config.tabBar.list || []).map(item => item.pagePath) + + Object.keys(config.page).forEach(function (pagePath) { + uniRoutes.push({ + path: '/' + pagePath, + meta: { + isTabBar: tabBarList.indexOf(pagePath) !== -1 + } + }) + }) +} + +export function registerConfig (config) { + Object.assign(uniConfig, config) + parseRoutes(uniConfig) +} diff --git a/src/platforms/app-plus/service/uni/create-instance-context.js b/src/platforms/app-plus/service/uni/create-instance-context.js index ca2ab7641..02c0d1150 100644 --- a/src/platforms/app-plus/service/uni/create-instance-context.js +++ b/src/platforms/app-plus/service/uni/create-instance-context.js @@ -1,36 +1,48 @@ import { getApp, registerApp -} from 'uni-platform/service/app' +} from './app' import { + registerPage, getCurrentPages -} from 'uni-platform/service/page' +} from './page' + +import { + uniConfig, + uniRoutes, + registerConfig +} from './config' import { createUniInstance } from './uni' -const __uniConfig = Object.create(null) -const __uniRoutes = [] - export function createInstanceContext ({ weex, WeexPlus }) { const plus = new WeexPlus(weex) return { - __uniConfig, - __uniRoutes, - __registerApp (appVm, { - uniConfig, - uniRoutes - }) { - Object.assign(__uniConfig, uniConfig) - uniRoutes.forEach(route => __uniRoutes.push(route)) - registerApp(appVm, __uniRoutes, plus) + __uniConfig: uniConfig, + __uniRoutes: uniRoutes, + __registerConfig (config) { + registerConfig(config) + }, + __registerApp (appVm) { + registerApp(appVm, uniRoutes, plus) + }, + __registerPage (pageVm) { + registerPage(pageVm) }, - uni: createUniInstance(plus), + uni: createUniInstance( + weex, + plus, + __uniConfig, + __uniRoutes, + getApp, + getCurrentPages + ), getApp, getCurrentPages } diff --git a/src/platforms/app-plus-nvue/service/page.js b/src/platforms/app-plus/service/uni/page.js similarity index 87% rename from src/platforms/app-plus-nvue/service/page.js rename to src/platforms/app-plus/service/uni/page.js index 12f1eca46..4adb1d0b4 100644 --- a/src/platforms/app-plus-nvue/service/page.js +++ b/src/platforms/app-plus/service/uni/page.js @@ -11,7 +11,7 @@ export function getCurrentPages () { * * page.viewappear onShow * page.viewdisappear onHide - * + * * navigateTo * redirectTo * @@ -22,5 +22,5 @@ export function getCurrentPages () { * */ export function registerPage (pageVm) { - + pageVms.push(pageVm) } -- GitLab