简介
nvue 即 native vue,在weex基础上封装了uni的api,提供了原生渲染能力,常用于在App端某些vue页面表现不佳的场景下作为强化补充。
App的nvue页面使用原生渲染,一个项目中可以同时存在vue和nvue页面。
模式
- weex模式(不建议使用)
老模式,只能使用weex语法,只能编译为app - uni-app模式
默认模式,使用通用的语法和组件,可以编译为全平台
特点
优势
- 新的组件
list
高性能长列表、waterfall
高性能瀑布流、refresh
高性能下拉刷新、barcode
页面内嵌扫码等 - 原生控件的层级覆盖问题
- 深度使用video、map组件
劣势
- canvas不如vue+renderjs,且nvue页面的css不支持媒体查询,不利于横竖屏动态切换、适配屏幕。
- nvue无法在真机运行时启用webview调试
- 仅支持flex布局,且rem、vw、vh、百分比等在nvue中不支持
- 不支持App.vue中的全局样式
- nvue只能通过js引入字体
兼容处理
- nvue可用bindingx加强视图层
- IOS平台默认情况下滚动容器组件(如list、waterfall组件)内容不足时,由于没有撑满容器的可视区域会导致无法上下滚动,此时无法操作下拉刷新功能,无法触发refresh组件的@refresh、@pullingdown事件。 此时可在容器组件中配置alwaysScrollableVertical属性值为true来设置支持上下滚动,支持下拉刷新操作。
- 目前 nvue 在App端,还不支持
--status-bar-height
变量,详见【uni-app nvue章节】替代方案是在页面onLoad时通过uni.getSystemInfoSync().statusBarHeight
获取状态栏高度,然后通过style绑定方式给占位view设定高度
<template>
<view class="content">
<view :style="{ height: iStatusBarHeight + 'px'}"></view>
</view>
</template>
<script>
export default {
data() {
return {
iStatusBarHeight:0
}
},
onLoad() {
this.iStatusBarHeight = uni.getSystemInfoSync().statusBarHeight
}
}
</script>
开发调试
新建nvue页面
HBuilder页面创建时可以选择为vue还是nvue页面
在非app端,只有uni-app编译模式的nvue文件才会编译(因weex模式不支持非app端)。
如果一个页面路由下出现同名的vue和nvue文件,App端会使用nvue页面,非App端会使用vue页面。