我正在使用此代码仅在用户第一次访问应用时显示启动画面。这部分工作,但它无法正常工作。
当之前已经访问过该应用的用户再次访问时,它会首先显示启动画面仅1秒(所以延迟),然后才会(最终)进入主屏幕...所以这就像一个小故障。
主控制器:
$urlRouterProvider.otherwise("/splash");
在我的 splashscreen控制器中,我有这个:
if (localStorage['firstTimeLoad']!='TRUE'){
localStorage['firstTimeLoad']='TRUE';
$state.go('splash');
}
else {
$state.go('home');
}
我的问题是:如何摆脱这种延迟/故障?如果用户可以看到它不再需要看到的东西,我发现它非常不专业。
答案 0 :(得分:1)
离子项目的根文件夹中应该有一个config.xml。在里面你应该能够找到这些选项
<preference name="SplashScreenDelay" value="2500" />
<preference name="FadeSplashScreenDuration" value="400" />
根据您的需要调整它们。
答案 1 :(得分:0)
可能有两种可能性 - 1)你已经提到了启动画面状态作为你的默认路由器,一旦执行到了启动控制器,那么只有你正在检查并使用户相应地着陆。
2)或者如果不是启动画面必须是您的父状态。
我建议您将此逻辑移至父状态并确保启动画面不是您的父状态。
答案 2 :(得分:0)
使用ui-router
,您可以采用一些方法
$stateProvider.state("mainStateWhereUserArrives", {
onEnter: function(title){
if (localStorage['firstTimeLoad']!='TRUE'){
localStorage['firstTimeLoad']='TRUE';
$state.go('splash');
}
}
})
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams, options) {
if (localStorage['firstTimeLoad'] != 'TRUE') {
event.preventDefault()
localStorage['firstTimeLoad'] = 'TRUE';
$state.go('splash');
}
})
您可以将其放在run
块
答案 3 :(得分:0)
使用以下代码来定义路线中的居住状态。
$stateProvider.state("home", {
// dummy template and resolve things
template: '<h1>{{title}}</h1>',
resolve: { title: 'My Contacts' },
controller: function($scope, title){
$scope.title = title;
},
onEnter: function($state){
if (localStorage.firstTimeLoad != true){
localStorage.firstTimeLoad= true;
$state.go('splash');
}
}
})
它经过测试的代码并且工作得非常好。