From a7367daa85f7e53270645f0c325ab5fa7b6c49f5 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Fri, 25 Oct 2019 18:58:39 +0800 Subject: [PATCH] feat(v3): titleNViewButton --- packages/uni-app-plus/dist/index.v3.js | 67 +++++++++++++------ .../webview/parser/title-nview-parser.js | 67 +++++++++++++------ 2 files changed, 92 insertions(+), 42 deletions(-) diff --git a/packages/uni-app-plus/dist/index.v3.js b/packages/uni-app-plus/dist/index.v3.js index 258e6fbfb..064c12995 100644 --- a/packages/uni-app-plus/dist/index.v3.js +++ b/packages/uni-app-plus/dist/index.v3.js @@ -6018,6 +6018,31 @@ var serviceContext = (function () { } } + function createButtonOnClick (index) { + return function onClick (btn) { + const pages = getCurrentPages(); + if (!pages.length) { + return + } + btn.index = index; + const page = pages[pages.length - 1]; + page.$vm && + page.$vm.__call_hook && + page.$vm.__call_hook('onNavigationBarButtonTap', btn); + } + } + + function parseTitleNViewButtons (titleNView) { + const buttons = titleNView.buttons; + if (!Array.isArray(buttons)) { + return titleNView + } + buttons.forEach((btn, index) => { + btn.onclick = createButtonOnClick(index); + }); + return titleNView + } + function parseTitleNView (routeOptions) { const windowOptions = routeOptions.window; const titleNView = windowOptions.titleNView; @@ -6030,38 +6055,38 @@ var serviceContext = (function () { ) ) { return false - } - - const titleImage = windowOptions.titleImage || ''; - const transparentTitle = windowOptions.transparentTitle || 'none'; - const titleNViewTypeList = { - 'none': 'default', - 'auto': 'transparent', - 'always': 'float' + } + + const titleImage = windowOptions.titleImage || ''; + const transparentTitle = windowOptions.transparentTitle || 'none'; + const titleNViewTypeList = { + 'none': 'default', + 'auto': 'transparent', + 'always': 'float' }; const ret = { autoBackButton: !routeOptions.meta.isQuit, titleText: titleImage === '' ? windowOptions.navigationBarTitleText || '' : '', - titleColor: windowOptions.navigationBarTextStyle === 'black' ? '#000000' : '#ffffff', - type: titleNViewTypeList[transparentTitle], - backgroundColor: transparentTitle !== 'always' ? windowOptions.navigationBarBackgroundColor || '#000000' : 'rgba(0,0,0,0)', - tags: titleImage === '' ? [] : [{ - 'tag': 'img', - 'src': titleImage, - 'position': { - 'left': 'auto', - 'top': 'auto', - 'width': 'auto', - 'height': '26px' - } + titleColor: windowOptions.navigationBarTextStyle === 'black' ? '#000000' : '#ffffff', + type: titleNViewTypeList[transparentTitle], + backgroundColor: transparentTitle !== 'always' ? windowOptions.navigationBarBackgroundColor || '#000000' : 'rgba(0,0,0,0)', + tags: titleImage === '' ? [] : [{ + 'tag': 'img', + 'src': titleImage, + 'position': { + 'left': 'auto', + 'top': 'auto', + 'width': 'auto', + 'height': '26px' + } }] }; routeOptions.meta.statusBarStyle = windowOptions.navigationBarTextStyle === 'black' ? 'dark' : 'light'; if (isPlainObject(titleNView)) { - return Object.assign(ret, titleNView) + return Object.assign(ret, parseTitleNViewButtons(titleNView)) } return ret diff --git a/src/platforms/app-plus/service/framework/webview/parser/title-nview-parser.js b/src/platforms/app-plus/service/framework/webview/parser/title-nview-parser.js index 21e41f006..ddf78d4e2 100644 --- a/src/platforms/app-plus/service/framework/webview/parser/title-nview-parser.js +++ b/src/platforms/app-plus/service/framework/webview/parser/title-nview-parser.js @@ -3,6 +3,31 @@ import { } from 'uni-shared' +function createButtonOnClick (index) { + return function onClick (btn) { + const pages = getCurrentPages() + if (!pages.length) { + return + } + btn.index = index + const page = pages[pages.length - 1] + page.$vm && + page.$vm.__call_hook && + page.$vm.__call_hook('onNavigationBarButtonTap', btn) + } +} + +function parseTitleNViewButtons (titleNView) { + const buttons = titleNView.buttons + if (!Array.isArray(buttons)) { + return titleNView + } + buttons.forEach((btn, index) => { + btn.onclick = createButtonOnClick(index) + }) + return titleNView +} + export function parseTitleNView (routeOptions) { const windowOptions = routeOptions.window const titleNView = windowOptions.titleNView @@ -15,38 +40,38 @@ export function parseTitleNView (routeOptions) { ) ) { return false - } - - const titleImage = windowOptions.titleImage || '' - const transparentTitle = windowOptions.transparentTitle || 'none' - const titleNViewTypeList = { - 'none': 'default', - 'auto': 'transparent', - 'always': 'float' + } + + const titleImage = windowOptions.titleImage || '' + const transparentTitle = windowOptions.transparentTitle || 'none' + const titleNViewTypeList = { + 'none': 'default', + 'auto': 'transparent', + 'always': 'float' } const ret = { autoBackButton: !routeOptions.meta.isQuit, titleText: titleImage === '' ? windowOptions.navigationBarTitleText || '' : '', - titleColor: windowOptions.navigationBarTextStyle === 'black' ? '#000000' : '#ffffff', - type: titleNViewTypeList[transparentTitle], - backgroundColor: transparentTitle !== 'always' ? windowOptions.navigationBarBackgroundColor || '#000000' : 'rgba(0,0,0,0)', - tags: titleImage === '' ? [] : [{ - 'tag': 'img', - 'src': titleImage, - 'position': { - 'left': 'auto', - 'top': 'auto', - 'width': 'auto', - 'height': '26px' - } + titleColor: windowOptions.navigationBarTextStyle === 'black' ? '#000000' : '#ffffff', + type: titleNViewTypeList[transparentTitle], + backgroundColor: transparentTitle !== 'always' ? windowOptions.navigationBarBackgroundColor || '#000000' : 'rgba(0,0,0,0)', + tags: titleImage === '' ? [] : [{ + 'tag': 'img', + 'src': titleImage, + 'position': { + 'left': 'auto', + 'top': 'auto', + 'width': 'auto', + 'height': '26px' + } }] } routeOptions.meta.statusBarStyle = windowOptions.navigationBarTextStyle === 'black' ? 'dark' : 'light' if (isPlainObject(titleNView)) { - return Object.assign(ret, titleNView) + return Object.assign(ret, parseTitleNViewButtons(titleNView)) } return ret -- GitLab