uniapp生命周期,路由与页面跳转

本文详细介绍了uni-app的生命周期函数,包括应用生命周期、页面生命周期和组件生命周期。同时,讲解了uni-app的路由与页面跳转方法,如navigateTo、redirectTo、switchTab和navigateBack的使用场景和注意事项。在页面跳转中,强调了不同方法的区别,如navigateTo会保留当前页面,而redirectTo会关闭当前页面。此外,还提到了如何在uni-app中启用和配置下拉刷新功能。
部署运行你感兴趣的模型镜像

uni生命周期函数

应用的生命周期

函数名说明
onLaunch当uni-app 初始化完成时触发(全局只触发一次)
onShow当 uni-app 启动,或从后台进入前台显示
onHide当 uni-app 从前台进入后台
onError当 uni-app 报错时触发

示例代码

<script>
export default {
	//只能在App.vue中监听!
	onLaunch: function() {
		console.log('App Launch');
	},
	onShow: function() {
		console.log('App Show');
	},
	onHide: function() {
		console.log('App Hide');
	}
};
</script>

页面生命周期

函数名说明
onLoad监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参)
onShow监听页面显示
onReady监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
onHide监听页面隐藏
onUnload监听页面卸载
onResize监听窗口尺寸变化
onPullDownRefresh监听用户下拉动作,一般用于下拉刷新
onReachBottom页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
onTabItemTap点击 tab 时触发,参数为Object,具体见下方注意事项
onShareAppMessage用户点击右上角分享

代码示例

export default {
	onLoad() {
		console.log('页面初始化执行一次 onload')
	},
	onReady() {
		console.log('页面加载完毕 执行一次 onReady')
	},
	onShow() {
		console.log('页面进入执行 执行多次 onShow')
	},
	onHide() {
		console.log('页面进入离开 执行多次 onHide')
	},
	onPullDownRefresh() {
		console.log('用户执行了下拉刷新')
	},
	onTabItemTap() {
		console.log('用户点击了tabbar')
	},
	onShareAppMessage() {
		console.log('用户点击了分享')
		//分享页面的设置
		return {
			title:"",
			path:"",
			imageUrl:""
		}
	}
}

下拉刷新
pages.json中,在globalStyle属性配置enablePullDownRefresh`,即所有页面都能下拉刷新

"globalStyle": {
		"navigationBarTextStyle": "white",
		"navigationBarTitleText": "uni-app",
		"navigationBarBackgroundColor": "#007AFF",
		"backgroundColor": "#FFFFFF",
		"enablePullDownRefresh": true //所有页面实现下拉刷新
	}

只在某个页面实现下拉刷新,找到的当前页面的pages节点,并在 style 选项中开启 enablePullDownRefresh

"pages": [
		{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "首页",
				"navigationBarBackgroundColor":"#4CD964",
				"enablePullDownRefresh":true  //首页页面下拉刷新
			}
		},
		{
            "path" : "pages/about/about",
            "style" : {
				"navigationBarTitleText":"关于",
				"navigationBarBackgroundColor":"#4CD964"
			}
        },
		{
            "path" : "pages/news/news",
            "style" : {
				"navigationBarTitleText":"新闻",
				"navigationBarBackgroundColor":"#4CD964"
			}
        }
    ]

组件生命周期

函数名说明
beforeCreate组件初始化,但数据原生观测 、自定义观测(event\watcher)没生成之前。 未完全创建
created组件创建后,但还未挂载。 完全创建阶段
beforeMount组件渲染后,挂载前。 渲染后带挂载
mounted组件挂载到页面,可用vm.$el访问。 挂载OK
beforeUpdate虚拟 DOM 重新渲染和打补丁之前。 再次渲染前
updated组件DOM已经更新。 再次渲染后
activatedkeep-alive组件激活时调用。 当前组件被激活:显示
deactivatedkeep-alive组件停用时调用。 当前组件隐藏
beforeDestroy实例销毁之前调用。 实例仍然完全可用。销毁前
destroyVue实例销毁后调用

补充:挂载阶段,先渲染组件,然后挂载组件。

components目录下新建页面test.vue,使用组件。

test.vue文件代码

<template>
	<view>
		<text>我是test组件</text>
		<button type="primary" @click="test">按钮</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				
			};
		},
		beforeMount() {
			console.log("在挂载开始之前被调用")
		},
		mounted() {
			console.log("挂载到实例上去之后调用");
			this.$nextTick(function(){
				//渲染完毕
				console.log("OK")
			})
		},
		methods: {
			test() {
				
			}
		}
	}
</script>

index.vue使用组件需要引进test文件,进行注册。
index.vue代码

<template>
	<view class="demo">
		<test></test> <!-- 使用注册test页面标签 -->
	</view>
</template>

<script>
import test from '../../components/test.vue'  //引入文件
export default {
	data(){
		return {}
	}, 
	//注册组件
	components:{
		test
	}
}
</script>

uni-app路由与页面跳转

方式说明
uni.navigateTo保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面
uni.redirectTo关闭当前页面,跳转到应用内的某个页面
uni.reLaunch关闭所有页面,打开到应用内的某个页面
uni.switchTab跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
uni.navigateBack关闭当前页面,返回上一页面或多级页面

uni.navgateTo()
保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。
index.vue也就是起始页面跳转到one.vue页面并传递参数

index.vue页面

<template>
	<view class="demo">
		<button type="primary" @click="toPath">toOne</button>
	</view>
</template>

<script>
export default {
	data(){
		return {}
	},
	methods: {
		toPath(){
			/*  
				navigateTo
				跳转时保留老页面,一般用于需要返回
			*/
			uni.navigateTo({
				url:"../one/one?name:lisa"
			})
		}
	}
}
</script>

one.vue页面

<template>
	<view>
		<text>我是one页面</text>
		<button type="primary" @click="goBack">返回</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				
			}
		},
		onLoad(option) {
			//路由获取参数
			console.log(option)
		},
		methods: {
			goBack(){
				uni.navigateBack() //直接返回上一级
			}
		}
	}
</script>

uni.redirectTo()
关闭当前页面,跳转到应用内的某个页面
one.vue页面跳到two.vue页面,再从two.vue页面跳到one.vue页面

<template>
	<view>
		<text>我是one页面</text>
		<button type="primary" @click="toPath">toTwo</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				
			}
		}
		methods: {
			toPath(){
				//跳转时关闭当前页面,可以任意跳转
				uni.redirectTo({
					url:"../two/two"
				})
			}
		}
	}
</script>
<template>
	<view>
		<test>我是two页面</test>
		<button type="primary" @click="toPath">toOne</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				
			}
		},
		methods: {
			toPath() {
				//跳转时关闭当前页面,可以任意跳转
				uni.redirectTo({
					url:"../one/one"
				})
			}
		}
	}
</script>

uni.switchTab
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
注:使用switchTab只能跳转tabBarlist列表里的页面

"tabBar": {
		"color":"#000000",
		"selectedColor":"#007AFF",  //选中时的文字颜色
		"backgroundColor":"#FFFFFF",
		"list": [
			{
				"pagePath": "pages/index/index",
				"iconPath": "static/image/person.png", //图片路径
				"selectedIconPath": "static/image/personH.png", //选中时的图片路径
				"text": "首页"
			},
			{
				"pagePath": "pages/about/about",
				"iconPath": "static/image/person.png",
				"selectedIconPath": "static/image/personH.png",
				"text": "关于"
			},
			{
				"pagePath": "pages/news/news",
				"iconPath": "static/image/person.png",
				"selectedIconPath": "static/image/personH.png",
				"text": "新闻"
			}
		]
	}
<template>
	<view class="demo">
		<button type="primary" @click="toPath">toAbout</button>
	</view>
</template>

<script>
export default {
	data(){
		return {}
	},
	methods: {
		toPath(){
			//只能跳转pages.json中tabBar里的页面
			uni.switchTab({
				url:"../about/about"
			})
		}
	}
}
</script>

uni.navigateBack
关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层

//注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法不会

// 此处是one页面
uni.navigateTo({
    url: 'two?id=1'
});

// 此处是two页面
uni.navigateTo({
    url: 'three?id=1'
});

// 在three页面内返回one页面
uni.navigateBack({
    delta: 2
});

需注意:

navigateTo, redirectTo 只能打开非 tabBar 页面。
navigateTo 跳转时,调用该方法的页面会被加入堆栈,而redirectTo方法不会。
switchTab 只能打开 tabBar 页面。
不能在 App.vue 里面进行页面跳转。

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

UniApp 中,当通过路由跳转到新页面,目标页面会经历一系列的生命周期函数。这些生命周期函数会在页面加载、显示、准备就绪等不同阶段被依次调用。以下是页面路由跳转后执行的生命周期函数及其执行顺序: - `onLoad()`:页面加载触发,是页面生命周期中最早被调用的函数之一,通常用于页面初始化操作,如获取页面参数、请求数据等[^4]。 - `onShow()`:页面显示触发,无论是页面初次加载还是从后台切换到前台,都会调用此函数,适合用于刷新页面数据或恢复页面状态[^2]。 - `onReady()`:页面初次渲染完成触发,此页面已经准备好,可以进行 DOM 操作或初始化第三方组件[^4]。 如果页面被隐藏或卸载,还会触发以下生命周期函数: - `onHide()`:页面隐藏触发,比如当用户跳转到其他页面或应用进入后台[^2]。 - `onUnload()`:页面卸载触发,即页面被关闭调用,可用于释放资源或保存页面状态[^4]。 需要注意的是,`onLoad` 和 `onShow` 是每次页面显示都会被调用的,而 `onReady` 只在页面初次渲染完成后调用一次。同样,`onHide` 和 `onUnload` 也只在特定的情况下被调用。 例如,当使用 `uni.navigateTo` 方法跳转到新页面,目标页面的 `onLoad`、`onShow` 和 `onReady` 会依次被调用。如果用户再次返回该页面,`onLoad` 不会再次被调用(因为页面已经在内存中),但 `onShow` 会再次被调用以响应页面的重新显示。如果用户关闭页面,则会调用 `onUnload`。 下面是一个简单的示例,展示了如何在页面中使用这些生命周期函数: ```javascript Page({ onLoad: function(options) { console.log('页面加载'); // 可以在这里获取页面参数 options }, onShow: function() { console.log('页面显示'); // 页面显示可以刷新数据 }, onReady: function() { console.log('页面初次显示'); // 页面初次渲染完成可以进行 DOM 操作 }, onHide: function() { console.log('页面隐藏'); // 页面隐藏可以保存数据 }, onUnload: function() { console.log('页面卸载'); // 页面卸载可以释放资源 } }); ``` 通过合理利用这些生命周期函数,可以更好地控制页面的行为和状态,提高用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值