目录
1.应用生命周期
1.
1.3全局样式
2.页面生命周期
2.1页面简介
2.2新建页面
2.3删除页面
2.4应用首页
2.5页面生命周期
1.应用生命周期
uni-app的生命周期是以小程序的生命周期为基础实现的,分为应用的生命周期、页面生命周期和组件的生命周期,其中组件生命周期就是Vue的生命周期。
是uni-app的主组件,所有页面都是在下进行切换的,是页面入口文件。但
本身不是页面,这里不能编写视图元素,也就是没有
<template>
。
这个文件的作用包括:调用应用生命周期函数、配置全局样式、配置全局的存储globalData
应用生命周期仅可在中监听,在页面监听无效。
1.1应用生命周期
uni-app
支持如下应用生命周期函数:
示例代码
-
<script>
-
// 只能在里监听应用的生命周期
-
export default {
-
onLaunch: function() {
-
console.log('App Launch')
-
},
-
onShow: function() {
-
console.log('App Show')
-
},
-
onHide: function() {
-
console.log('App Hide')
-
}
-
}
-
</script>
注意
-
应用生命周期仅可在
中监听,在其它页面监听无效。
- 以组合式 API 使用时,在 Vue2 和 Vue3 中存在一定区别,请分别参考:Vue2 组合式 API 使用文档 和 Vue3 组合式 API 使用文档。
- 应用启动参数,可以在API
获取,详见
- onlaunch里进行页面跳转,如遇白屏报错,请参考onlaunch生命周期内navigateto跳转页面注意 - DCloud问答
-
不能写模板
- onPageNotFound 页面实际上已经打开了(比如通过分享卡片、小程序码)且发现页面不存在,才会触发,api 跳转不存在的页面不会触发(如 )
1.
小程序有globalData,这是一种简单的全局变量机制。这套机制在uni-app里也可以使用,并且全端通用。
以下是 中定义globalData的相关配置:
-
<script>
-
export default {
-
globalData: {
-
text: 'text'
-
}
-
}
-
</script>
js中操作globalData的方式如下: getApp(). = 'test'
在应用onLaunch时,getApp对象还未获取,暂时可以使用获取globalData。
如果需要把globalData的数据绑定到页面上,可在页面的onShow页面生命周期里进行变量重赋值。
nvue的weex编译模式中使用globalData的话,由于weex生命周期不支持onShow,但熟悉5+的话,可利用监听webview的addEventListener show事件实现onShow效果,或者直接使用weex生命周期中的beforeCreate。但建议开发者使用uni-app编译模式,而不是weex编译模式。
globalData是简单的全局变量,如果使用状态管理,请使用vuex
(中定义)
1.3全局样式
在中,可以定义一些全局通用样式,例如需要加一个通用的背景色,首屏页面渲染的动画等都可以写在App.vue中。
注意如果工程下同时有vue和nvue文件,全局样式的所有css会应用于所有文件,而nvue支持的css有限,编译器会在控制台报警,提示某些css无法在nvue中支持。此时需要把nvue不支持的css写在单独的条件编译里。如:
-
<style>
-
/* #ifndef APP-PLUS-NVUE */
-
@import './common/';
-
/* #endif*/
-
</style>
2.页面生命周期
2.1页面简介
uni-app项目中,一个页面就是一个符合Vue SFC规范
的.vue
文件或.nvue
文件。
.vue
页面和.nvue
页面,均全平台支持,差异在于当uni-app发行到App平台时,.vue
文件会使用webview进行渲染,.nvue
会使用原生进行渲染,详见:nvue原生渲染。
2.2新建页面
uni-app
中的页面,通常会保存在工程根目录下的pages
目录下。
每次新建页面,均需在中配置
pages
列表;未在 -> pages
中配置的页面,uni-app
会在编译阶段进行忽略。的完整配置参考:全局文件。
通过HBuilderX开发 uni-app
项目时,在 uni-app
项目上右键“新建页面”,HBuilderX会自动在中完成页面注册,开发更方便。
同时,HBuilderX 还内置了常用的页面模板(如图文列表、商品列表等),选择这些模板,可以大幅提升你的开发效率。
2.3删除页面
删除页面时,需做两件工作:
删除.vue
文件或.nvue
文件
删除 -> pages
列表项中的配置
2.4应用首页
uni-app
会将 -> pages
配置项中的第一个页面,作为当前工程的首页(启动页)。
2.5页面生命周期
uni-app
页面除支持 Vue 组件生命周期外还支持下方页面生命周期函数,当以组合式 API 使用时,在 Vue2 和 Vue3 中存在一定区别,请分别参考:Vue2 组合式 API 使用文档 和 Vue3 组合式 API 使用文档。
onInit
使用注意
仅百度小程序基础库 3.260 以上支持 onInit 生命周期
其他版本或平台可以同时使用 onLoad 生命周期进行兼容,注意避免重复执行相同逻辑
不依赖页面传参的逻辑可以直接使用 created 生命周期替代
onReachBottom
使用注意 可在里定义具体页面底部的触发距离onReachBottomDistance,比如设为50,那么滚动页面到距离底部50px时,就会触发onReachBottom事件。
如使用scroll-view导致页面没有滚动,则触底事件不会被触发。scroll-view滚动到底部的事件请参考scroll-view的文档
onPageScroll
(监听滚动、滚动监听、滚动事件)参数说明:
注意
onPageScroll
里不要写交互复杂的js,比如频繁修改页面。因为这个生命周期是在渲染层触发的,在非h5端,js是在逻辑层执行的,两层之间通信是有损耗的。如果在滚动过程中,频发触发两层之间的数据交换,可能会造成卡顿。
如果想实现滚动时标题栏透明渐变,在App和H5下,可在中配置titleNView下的type为transparent,参考。
如果需要滚动吸顶固定某些元素,推荐使用css的粘性布局,参考插件市场。插件市场也有其他js实现的吸顶插件,但性能不佳,需要时可自行搜索。
在App、微信小程序、H5中,也可以使用wxs监听滚动,参考;在app-nvue中,可以使用bindingx监听滚动,参考。
onBackPress
上不可使用async
,会导致无法阻止默认返回
-
onPageScroll : function(e) { //nvue暂不支持滚动监听,可用bindingx代替
-
console.log("滚动距离为:" + e.scrollTop);
-
},
onTabItemTap
返回的json对象说明:
注意
onTabItemTap常用于点击当前tabitem,滚动或刷新当前页面。如果是点击不同的tabitem,一定会触发页面切换。
如果想在App端实现点击某个tabitem不跳转页面,不能使用onTabItemTap,可以使用放一个区块盖住原先的tabitem,并拦截点击事件。
支付宝小程序平台onTabItemTap表现为点击非当前tabitem后触发,因此不能用于实现点击返回顶部这种操作
-
onTabItemTap : function(e) {
-
(e);
-
// e的返回格式为json对象: {"index":0,"text":"首页","pagePath":"pages/index/index"}
-
},
onNavigationBarButtonTap
参数说明:
-
onNavigationBarButtonTap : function (e) {
-
(e);
-
// e的返回格式为json对象:{"text":"测试","index":0}
-
}
onBackPress
回调参数对象说明:
-
export default {
-
data() {
-
return {};
-
},
-
onBackPress(options) {
-
console.log('from:' + options.from)
-
}
-
}
注意
- nvue 页面weex编译模式支持的生命周期同weex,具体参考:weex生命周期介绍。
- 支付宝小程序真机可以监听到非
navigateBack
引发的返回事件(使用小程序开发工具时不会触发onBackPress
),不可以阻止默认返回行为。