需求背景
在uni-app subNVue 原生子窗体开发指南文档中列举了subNVue
在开发过程中能解决的很多问题。
但在现实生活中还有几个问题迫切的需要解决。例如:
1、免配置page.json
,动态打开subNVue
2、subNVue
被关闭后,无法再次打开
3、适用场景非常多,更多玩法等你开发
原理解析
正常的subNVue
需要在page.json
中配置到对应需要使用subNVue
的页面下。但这也制约了我们将subNVue
写成通用组件。还有多个页面使用,每个页面都得配的麻烦。
通过阅读Uni-app
源码,我们可以看到一种全新被雪藏起来的调用方式,代码位于https://github.com/dcloudio/uni-app/blob/dev/src/platforms/app-plus/helpers/page.js。
const style = {
uniNView: {
// eslint-disable-next-line
path: `${typeof VUE_APP_TEMPLATE_PATH === 'string' ? VUE_APP_TEMPLATE_PATH : ''}/${url}.js`,
defaultFontSize: 16,
viewport: plus_.screen.resolutionWidth
}
}
plus.webview.create('', pageId, style)
当用html5+
的create webview
方法时,在style
里传uniNView
字段,则代表这个webview
是虚拟的,会使用nvue
来渲染。渲染的这个js
文件是nvue
编译出来的(你也可以理解为将subNVue
页面打包成了js
,然后交给webview
通过NVue
去渲染)
使用方法
1、声明subNVue
页面,生成uniNView
渲染页面的js
文件
在page.json
中声明subNVue
页面,声明之后,uni-app
会将nvue
页面打包为js
, 这个js
存放位置就是uniNView path
所打开文件的位置
目录结构:
├── components
│ └── sub-nvue
│ └── sub-nvue.nvue
2、打开subNVue
测试工程见附件