添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
GitHub
uniCloud Web控制台
插件市场
ask问答社区
uniAD
uni统计
代码仓库: Gitee GitHub uni-app的uni-im交流群:
官方QQ交流群
群35:713420817(2000人已满) 群34:530305531(2000人已满) 群33:498071674(2000人已满) 群32:166188631(2000人已满) 群31:567471669(2000人已满) 群30:371046920(2000人已满) 群29:202965481(2000人已满) 群28:166188776(2000人已满) 群27:811363410(2000人已满) 群26:147867597(2000人已满) 群25:165297000(2000人已满) 群24:672494800(2000人已满) 群23:599958679(2000人已满) 群22:687186952(2000人已满) 群21:717019120(2000人已满) 群20:165796402(2000人已满) 群19:165657124(2000人已满) 群18:698592271(2000人已满) 群17:951348804(2000人已满) 群16:719211033(2000人已满) 群15:516984120(2000人已满) 群14:465953250(2000人已满) 群13:699478442(2000人已满) 群12:884860657(2000人已满) 群11:296811328(2000人已满) 群10:959059626(2000人已满) 群9:775128777(2000人已满) 群8:695442854(2000人已满) 群7:942061423(2000人已满) 群6:697264024(2000人已满) 群5:731951419(2000人已满) 群4:942702595(2000人已满) 群3:773794803(2000人已满) 群2:901474938(2000人已满) 群1:531031261(2000人已满)
关注微信公众号

# App.vue/App.uvue

App.vue/uvue 是uni-app的主组件。uni-app js引擎版是app.vue。uni-app x是app.uvue。以下出现的 app.vue 一般泛指包含了 app.uvue

所有页面都是在 App.vue 下进行切换的,是应用入口文件。但 App.vue 本身不是页面,这里不能编写视图元素,也就是没有 <template>

这个文件的作用包括:监听应用生命周期、配置全局样式、配置全局的存储globalData

应用生命周期仅可在 App.vue 中监听,在页面监听无效。

# 应用生命周期

uni-app 支持如下应用生命周期函数:

函数名 说明 平台兼容
onLaunch uni-app 初始化完成时触发(全局只触发一次),参数为应用启动参数,同 uni.getLaunchOptionsSync 的返回值
onShow uni-app 启动,或从后台进入前台显示,参数为应用启动参数,同 uni.getLaunchOptionsSync 的返回值
onHide uni-app 从前台进入后台
onError uni-app 报错时触发 app-uvue 不支持
onUniNViewMessage nvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯 app-uvue 不支持
onUnhandledRejection 对未处理的 Promise 拒绝事件监听函数(2.8.1+ app-uvue 暂不支持) app-uvue 不支持
onPageNotFound 页面不存在监听函数 app-uvue 不支持
onThemeChange 监听系统主题变化 app-uvue 不支持
onLastPageBackPress 最后一个页面按下Android back键,常用于自定义退出 app-uvue-android 3.9+
onExit 监听应用退出 app-uvue-android 3.9+

示例代码

<script>
	// 只能在App.vue里监听应用的生命周期
	export default {
		onLaunch: function(options) {
			console.log('App Launch')
			console.log('应用启动路径:', options.path)
		onShow: function(options) {
			console.log('App Show')
			console.log('应用启动路径:', options.path)
		onHide: function() {
			console.log('App Hide')
</script>

注意

  • 应用生命周期仅可在 App.vue 中监听,在其它页面监听无效
  • 以组合式 API 使用时,在 Vue2 和 Vue3 中存在一定区别,请分别参考: Vue2 组合式 API 使用文档 Vue3 组合式 API 使用文档
  • 应用启动参数,可以在API uni.getLaunchOptionsSync 获取, 详见
  • onlaunch里进行页面跳转,如遇白屏报错,请参考 https://ask.dcloud.net.cn/article/35942
  • App.vue 不能写模板
  • onPageNotFound 页面实际上已经打开了(比如通过分享卡片、小程序码)且发现页面不存在,才会触发,api 跳转不存在的页面不会触发(如 uni.navigateTo)

# globalData

小程序有globalData,这是一种简单的全局变量机制。这套机制在uni-app里也可以使用,并且全端通用。

当然vue框架的全局变量,另有其他方式定义。

以下是 App.vue 中定义globalData的相关配置:

<script>  
    export default {  
        globalData: {  
            text: 'text'  
</script>  

js中操作globalData的方式如下: getApp().globalData.text = 'test'

在应用onLaunch时,getApp对象还未获取,暂时可以使用this.globalData获取globalData。

如果需要把globalData的数据绑定到页面上,可在页面的onShow页面生命周期里进行变量重赋值。

nvue的weex编译模式中使用globalData的话,由于weex生命周期不支持onShow,但熟悉5+的话,可利用监听webview的addEventListener show事件实现onShow效果,或者直接使用weex生命周期中的beforeCreate。但建议开发者使用uni-app编译模式,而不是weex编译模式。

globalData是简单的全局变量,如果使用状态管理,请使用 vuex (main.js中定义)

# 全局样式

App.vue 中,可以定义一些全局通用样式,例如需要加一个通用的背景色,首屏页面渲染的动画等都可以写在App.vue中。

注意如果工程下同时有vue和nvue文件,全局样式的所有css会应用于所有文件,而nvue支持的css有限,编译器会在控制台报警,提示某些css无法在nvue中支持。此时需要把nvue不支持的css写在单独的条件编译里。如:

<style>
    /* #ifndef APP-PLUS-NVUE */
    @import './common/uni.css';
    /* #endif*/
</style>