uni-app全局监听页面路由变化

uni-app全局监听页面路由变化

  • 在App.vue文件中配置以下代码,具体注释代码行中已标注。
<script>
	import { watch } from 'vue'
	import { pages } from '/pages.json'
	// 白名单列表(手动写或者引入pages.json进行循环遍历创建)
	const whiteList = ['/']
	// 遍历获取页面路径加入白名单
	for(let item of pages) {
		whiteList.push(`/${item.path}`)
	}
	// 判断是否满足跳转条件
	const hasPermission = (url)=> {
		// 在白名单中,直接返回true跳转
		if (whiteList.indexOf(url) !== -1) {
			return true;
		}
		return false;
	}
	export default {
		onLaunch: function() {
			console.log('App Launch')
		},
		onShow: function() {
			console.log('App Show')
		},
		onHide: function() {
			console.log('App Hide')
		},
		watch: {
			$route(to, from) {
				if(hasPermission(to.path)) {
					console.log('直接通过')
				} else {
					console.log('不通过,做相关处理(如跳转首页)');
					uni.redirectTo({
						url:'/pages/index/index'
					})
				}
			}
		}
	}
</script>

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
uni-app中,可以通过uni-app的生命周期函数和路由拦截来实现小程序登录拦截。 首先,在App.vue或者main.js中的App实例中监听uni-app的生命周期函数onLaunch,这个函数会在小程序初始化完成时触发。在该函数中,你可以进行登录状态的判断和处理。 以下是一个示例代码: ```javascript // main.js import Vue from 'vue' import App from './App' Vue.config.productionTip = false App.mpType = 'app' const app = new Vue({ ...App }) app.$mount() // App.vue export default { onLaunch(options) { // 判断用户是否登录 const isLogin = uni.getStorageSync('isLogin') if (!isLogin) { // 未登录,跳转到登录页面 uni.redirectTo({ url: '/pages/login/login' }) } } } ``` 在上述示例代码中,我们使用了uni.getStorageSync来判断用户是否登录,你可以根据自己的业务逻辑进行判断。如果用户未登录,则使用uni.redirectTo方法跳转到登录页面。 此外,还可以通过路由拦截的方式实现小程序登录拦截。在uni-app中,可以使用uni.beforeEach全局路由守卫来进行拦截。 以下是一个示例代码: ```javascript // main.js import Vue from 'vue' import App from './App' Vue.config.productionTip = false App.mpType = 'app' const app = new Vue({ ...App }) app.$mount() // router.js import Vue from 'vue' import Router from 'uni-simple-router' Vue.use(Router) const router = new Router({ routes: [ // 路由配置 ] }) // 全局路由前置守卫 router.beforeEach((to, from, next) => { if (to.path !== '/login' && !uni.getStorageSync('isLogin')) { // 未登录,跳转到登录页面 next({ path: '/login' }) } else { next() } }) export default router ``` 在上述示例代码中,我们使用了全局路由前置守卫router.beforeEach来进行登录拦截。如果用户未登录并且不是跳转到登录页面,则使用next方法进行路由重定向到登录页面。 通过以上两种方式,你可以在uni-app中实现小程序的登录拦截。根据你的具体需求和项目架构,选择适合你的方式来实现即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值