uni-app跳转页面的两种方式

uni-app跳转页面的两种方式

在使用uni-app时,想在登录后跳转到index页面,使用uni.navigateTo(),结果报错errMsg: "navigateTo:fail can not navigateTo a tabbar page",通过将uni.navigateTo()改为uni.switchTab(),问题得到解决。在此对uni-app页面跳转的两种方式进行总结。

1 通过navigator标签跳转

<template>
	<view>
        <navigator url="/pages/about/about">
            <button type="default">通过navigator组件跳转到about页面</button>
        </navigator>
    </view>
</template>

uni-appnavigator标签是用于页面跳转的组件。它可以通过点击触发页面的跳转,类似于HTML的a标签。

navigator标签的属性包括

  • url:跳转的目标页面路径

  • open-type:跳转方式,可选值包括 navigateToredirectToswitchTabreLaunchnavigateBack

  • delta:返回的页面数,当open-typenavigateBack时生效

  • hover-class:点击时的样式类

  • hover-stop-propagation:是否阻止事件冒泡

  • hover-start-time:按下后多久出现点击态,单位毫秒

  • hover-stay-time:手指松开后点击态保留时间,单位毫秒

2 通过方法实现跳转

<template>
	<view>
		<button type="default" @click="goto('/pages/about/about')">通过方法跳转到about页面</button>
	</view>
</template>
<script>
	export default {
		methods: {
			goto(url) {
				uni.navigateTo({
					url: url
				})
			}
		}
	}
</script>

定义点击事件,当button被点击后通过uni.navigateTo()方法跳转页面。

我的目标是在点击按钮后跳转到主页,却报了个错误errMsg: "navigateTo:fail can not navigateTo a tabbar page",经搜集资料发现,使用uni.switchTab()替代uni.navigateTo(),可以实现功能。

uni.switchTab()uni.navigateTo()的区别

  • uni.switchTab()用于tabBar页面间的跳转,只能跳转到tabBar页面,而uni.navigateTo()可以跳转到任意页面。

  • uni.switchTab()不会触发目标页面的onLoad方法和onShow方法,因为tabBar页面已经在app启动时加载过了,而uni.navigateTo()会触发目标页面的onLoad方法和onShow方法。

  • uni.switchTab()不支持传递参数,因为tabBar页面的参数已经在app启动时加载过了,而uni.navigateTo()可以通过url传递参数。

  • uni.switchTab()不能返回上一个页面,只能通过另外一个tabBar页面或者在当前页面通过uni.reLaunch()方法跳转回来,而uni.navigateTo()可以通过uni.navigateBack()方法返回上一个页面。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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中实现小程序的登录拦截。根据你的具体需求和项目架构,选择适合你的方式来实现即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值