1***@163.com
1***@163.com
  • 发布:2024-01-18 10:22
  • 更新:2024-01-18 10:22
  • 阅读:834

【报Bug】APP版使用uni.reLaunch(),出现页面不能立即跳转的问题。

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.99

手机系统: Android

手机系统版本号: Android 8.0

手机厂商: 华为

手机机型: P10

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: HBuilderX

操作步骤:

<template>
//...
</template>
<script>
export default {
data() {
return {
tableData: [],
};
},

mounted() {  
    this.checkUserRole(); // 在页面加载时检查用户角色  
},  

methods: {  
    checkUserRole() {  
        const ruler = uni.getStorageSync('ruler');  
        console.log("当前用户的ruler", ruler);   
        if (ruler === '一般用户') {    // 如果是一般用户,跳转到首页  
            uni.reLaunch({  
                url: '/pages/index/index' // 跳转到首页  
            })  

        } else if (ruler === '管理员') {    // 如果是管理员,获取用户数据  
            this.getUser();  
        } else {    // 其他情况(ruler为空或未定义),也跳转到首页  
            uni.reLaunch({  
                url: '/pages/index/index' // 跳转到首页  
            })  
        }  
    },              
    async getUser() {  

//...

预期结果:

<template>
//...
</template>
<script>
export default {
data() {
return {
tableData: [],
};
},

mounted() {  
    this.checkUserRole(); // 在页面加载时检查用户角色  
},  

methods: {  
    checkUserRole() {  
        const ruler = uni.getStorageSync('ruler');  
        console.log("当前用户的ruler", ruler);   
        if (ruler === '一般用户') {    // 如果是一般用户,跳转到首页  
            uni.reLaunch({  
                url: '/pages/index/index' // 跳转到首页  
            })  

        } else if (ruler === '管理员') {    // 如果是管理员,获取用户数据  
            this.getUser();  
        } else {    // 其他情况(ruler为空或未定义),也跳转到首页  
            uni.reLaunch({  
                url: '/pages/index/index' // 跳转到首页  
            })  
        }  
    },              
    async getUser() {  

//...

实际结果:

<template>
//...
</template>
<script>
export default {
data() {
return {
tableData: [],
};
},

mounted() {  
    this.checkUserRole(); // 在页面加载时检查用户角色  
},  

methods: {  
    checkUserRole() {  
        const ruler = uni.getStorageSync('ruler');  
        console.log("当前用户的ruler", ruler);   
        if (ruler === '一般用户') {    // 如果是一般用户,跳转到首页  
            uni.reLaunch({  
                url: '/pages/index/index' // 跳转到首页  
            })  

        } else if (ruler === '管理员') {    // 如果是管理员,获取用户数据  
            this.getUser();  
        } else {    // 其他情况(ruler为空或未定义),也跳转到首页  
            uni.reLaunch({  
                url: '/pages/index/index' // 跳转到首页  
            })  
        }  
    },              
    async getUser() {  

//...

bug描述:

uni-app项目.vue页面代码片段:
<template>
//...
</template>
<script>
export default {
data() {
return {
tableData: [],
};
},

mounted() {  
    this.checkUserRole(); // 在页面加载时检查用户角色  
},  

methods: {  
    checkUserRole() {  
        const ruler = uni.getStorageSync('ruler');  
        console.log("当前用户的ruler", ruler);   
        if (ruler === '一般用户') {    // 如果是一般用户,跳转到首页  
            uni.reLaunch({  
                url: '/pages/index/index' // 跳转到首页  
            })  

        } else if (ruler === '管理员') {    // 如果是管理员,获取用户数据  
            this.getUser();  
        } else {    // 其他情况(ruler为空或未定义),也跳转到首页  
            uni.reLaunch({  
                url: '/pages/index/index' // 跳转到首页  
            })  
        }  
    },              
    async getUser() {  

//...
以上代码实现在页面加载时先检查用户角色,如果是 '一般用户',执行:url: '/pages/index/index' // 跳转到首页。
在网页H5版的实际测试跳转正常,但在APP版测试后,发现当程序检查到用户是 '一般用户'时,界面并没有马上切换到首页,而是短暂的显示了本页面的<template>界面,然后界面才切换到首页,
然后使用beforeMount生命周期钩子来检查用户角色:
beforeMount() {
this.checkUserRole();
},
问题任然存在,后又修改为:
setTimeout(() => {
uni.reLaunch({
url: '/pages/index/index' // 跳转到首页
});
}, 0); // 延迟0毫秒,即在下一个事件循环中执行跳转

问题任然没有解决,请问以上现象是啥原因造成的,在结构上应该如何修改。

2024-01-18 10:22 负责人:无 分享
已邀请:

要回复问题请先登录注册