在做项目的时候遇到这样一个需求:app第一次启动时显示登陆页面,第二次启动后显示首页登录。简单来说就是需要根据不同的场景展示不同的页面。一开始我的想法是判断app启动时的场景,从而生成不同的路由,或者通过代码修改mainfest.json中的入口文件配置。不幸的是,uni-app不支持这种方式。我们能做的就是修复入口文件,判断应用启动时的场景,然后跳转到相应的页面。App.vue:onLaunch:function(){//确定登录状态constuserInfo=uni.getStorageSync('USER_INFO')if(userInfo){//登录状态uni.switchTab({url:'pages/chat/sessions/sessions'})}else{//没有登录uni.reLaunch({url:'pages/login/login',})}}但是这种做法会有一个问题:onLaunch方法和页面渲染是同时进行的App启动的时间是的,也就是说在逻辑判断结束之前,我们已经进入了固定的入口文件,开始渲染页面。逻辑判断完成后,我们会跳转到相应的页面。这种体验非常糟糕。解决方法:通过延长启动页的停留时间,等到onLaunch方法执行完后再关闭启动页,这样就不会出现页面闪烁跳转的痕迹。mainfest.json:设置启动页面关闭方式为手动"splashscreen":{"alwaysShowBeforeRender":false,"waiting":false,"autoclose":false,//设置为手动关闭启动界面"delay":0}应用程序。vue//判断登录状态constuserInfo=uni.getStorageSync('USER_INFO')if(userInfo){//登录状态plus.navigator.closeSplashscreen()}else{//未登录uni.reLaunch({url:'pages/login/login',success(){//手动关闭启动页(因为App.onLaunch方法和页面渲染是同时进行的,只有扩展启动页才能避免页面闪烁)plus.navigator.closeSplashscreen()}})}以上是完美解决方案,亲测有效。
