uniapp中页面跳转及encodeURIComponent转码的使用详解

一、uniapp页面跳转方法汇总

1. uni.navigateTo

保留当前页面,跳转到应用内的某个页面。使用示例如下:

uni.navigateTo({
    url: '/pages/detail/detail?id=1&name=测试'
});

通过这种方式跳转后,用户可以点击左上角的返回按钮回到上一页。适用于需要在多个页面间灵活切换,且保留当前页面状态的场景,比如从商品列表页跳转到商品详情页。

2. uni.redirectTo

关闭当前页面,跳转到应用内的某个页面。

uni.redirectTo({
    url: '/pages/login/login'
});

这种跳转方式会销毁当前页面,常用于登录成功后,从登录页面跳转到首页,避免用户通过返回按钮又回到登录前的状态。

3. uni.reLaunch

关闭所有页面,打开到应用内的某个页面。

uni.reLaunch({
    url: '/pages/home/home'
});

一般在应用的一些关键流程节点使用,比如用户注销登录后,直接回到应用首页,清除之前所有的页面栈。

4. uni.switchTab

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。

uni.switchTab({
    url: '/pages/tabbar/home/home'
});

适用于在底部导航栏的不同页面间切换,比如从个人中心页面切换到首页。

5. uni.navigateBack

关闭当前页面,返回上一页面或多级页面。可通过delta参数指定返回的页面数。

// 返回上一页
uni.navigateBack();
// 返回上三级页面
uni.navigateBack({
    delta: 3
});

二、encodeURIComponent转码的使用场景

不管是哪种页面跳转方法,只要涉及到页面间传参,就可能用到encodeURIComponent转码。

1. 参数中有特殊字符时

当传递的参数包含特殊字符,像中文、&=?等,就容易出现问题。以uni.navigateTo为例:

let desc = '这是一个包含&符号的描述';
uni.navigateTo({
    url: '/pages/detail/detail?desc=' + desc
});

在目标页面获取的desc参数可能并非预期内容,因为&在URL中有特殊用途,会导致参数解析错误。此时,需要用encodeURIComponent进行转码:

let desc = '这是一个包含&符号的描述';
let content = encodeURIComponent(desc);
uni.navigateTo({
    url: '/pages/detail/detail?desc=' + content 
});

在目标页面获取参数后,再用decodeURIComponent解码:

onLoad: function(options) {
    let content = decodeURIComponent(options.desc);
    console.log(content);
}

2. 参数值可能变化时

即便当前参数不包含特殊字符,但如果参数值未来可能发生变化并包含特殊字符,为防患于未然,也建议提前转码。

总之,在uniapp页面跳转传参时,只要参数有包含特殊字符的可能性,就应使用encodeURIComponent进行转码,确保参数准确无误地传递和解析,让应用的页面跳转和数据交互更加稳定可靠。

### 如何在 UniApp 中实现 H5 页面之间的跳转 #### 使用 `uni.navigateTo` 方法进行页面跳转 对于 H5 页面间的跳转,在 UniApp 中可以利用内置的方法来完成这一操作。当目标是从当前页面导航至新的页面而不关闭现有页面时,可采用 `uni.navigateTo()` 函数[^1]。 ```javascript // 跳转到名为 'newPage' 的新页面 uni.navigateTo({ url: '/pages/newPage/newPage' }); ``` 如果需要传递参数给下一个页面,则可以在 URL 后面附加查询字符串: ```javascript let name = "example"; let id = 123; uni.navigateTo({ url: `/pages/targetPage/targetPage?name=${encodeURIComponent(name)}&id=${id}` }); ``` #### 利用带有动画效果的页面切换 为了提升用户体验,还可以为页面间过渡添加动画效果。这可以通过配置全局样式文件中的 CSS 类以及设置路由守卫来达成[^3]。 首先,在 App.vue 或 main.js 文件里注册全局进入/离开钩子函数: ```javascript import Vue from 'vue'; Vue.prototype.$router.beforeEach((to, from, next) => { // 添加自定义类名用于触发CSS动画 document.body.classList.add('page-transition'); setTimeout(() => { document.body.classList.remove('page-transition'); next(); }, 0); }) ``` 接着,在 style 标签内定义相应的 CSS 动画规则: ```css .page-enter-active, .page-leave-active { transition: all .5s ease-out; } .page-enter-from, .page-leave-to { opacity: 0; } ``` 最后,确保每个页面组件都绑定了这些类以便于应用动画: ```html <template> <div class="animated-page"> <!-- 组件内容 --> </div> </template> <style scoped> .animated-page { /* 应用了上面定义好的动画 */ } </style> ``` 通过上述方式不仅能够实现在不同 H5 页面之间平滑转换,而且还能增强视觉上的连贯性和流畅度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小雪的博客.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值