uniapp 老玩家带你认识nvue的使用

3,804 阅读3分钟

nvue可以解决什么问题?

小程序和App的vue页面,主体是webview渲染的。为了提升性能,小程序和App的vue页面下部分ui元素,比如导航栏、tabbar、video、map使用了原生控件。这种方式被称为混合渲染。

虽然提升了性能,但原生组件带来了其他问题:

  • 前端组件无法覆盖原生控件的层级问题。
  • 原生组件不能嵌入特殊前端组件(如scroll-view,swiper)。
  • 原生控件无法灵活自定义。
  • 无法对原生组件设置 CSS 动画
  • 无法定义原生组件为 position: fixed;
  • 不能在父级节点使用 overflow: hidden 来裁剪原生组件的显示区域。

H5、App的nvue页面,不存在混合渲染的情况,它们或者全部是前端渲染、或者全部是原生渲染,不涉及层级问题。

nvue不同编译模式介绍

  • weex 模式:老模式,使用 weex组件,写法同weex标准写法。只能在 App 端中运行,部分 uni-app JS Api 不能使用。
  • uni-app 模式:新模式,默认模式,使用 uni-app 基础组件,组件、jsapi写法同uni-app。支持app.vue里的全局样式;支持nvue页面编译H5和小程序端;可以使用绝大部分 uni-app Api 。uni-app模式也可以使用weex里的组件,比如list、refresh、recircle-list。

详细介绍

\uni-app 编译模式uni-app 编译模式
平台仅 App所有端,包含小程序和 H5
组件weex 组件如 divuni-app 组件如 view
生命周期只支持 weex 生命周期支持所有 uni-app 生命周期
JS APIweex API、uni API、Plus APIweex API、uni API、Plus API
单位750px 是屏幕宽度,wx 是固定像素单位750rpx 是屏幕宽度,px 是固定像素单位
全局样式手动引入app.vue 的样式即为全局样式
页面滚动必须给页面套或组件默认支持页面滚动

开发 nvue 页面

nvue 页面结构同 vue, 由 templatestylescript 构成。

vue与nvue页面通信

1.在vue文件使用uni.$emit方法去实现要传递的数据

//下面的数据是我在data绑定的数据,写在你需要触发的方法下
console.log("传输中")
uni.$emit('page-send', {
		id:_this.id,
		title: _this.title,
		share: _this.shareHref,
		image:_this.shareImg,
})

2.在nvue文件使用uni.$on方法去实现接收数据

//下面的数据是我在vue文件绑定的数据拿到的,写在onLoad事件方法下
uni.$on('page-send', data => {
	_this.id = data.id
	_this.title = data.title
	_this.shareImg = data.image
	console.log("监听到了")
	// console.log(data)
})

注意:.需要将uni.$on方法写在onLoad方法下,并保证该nvue页面是有被运行到的

nvue发送网络请求

注意:只能使用自带的 uni.request 方法