我正在使用此代码仅在用户首次访问应用时显示splashscreen
。这部分有效,但它无法正常工作。
当之前已经访问过该应用的用户再次访问时,它会首先显示启动画面仅1秒(所以延迟),然后才会(最终)进入主屏幕...所以它就像一个小故障。
主控制器:
$urlRouterProvider.otherwise("/splash");
在我的 splashscreen控制器中,我有这个:
if (localStorage['firstTimeLoad']!='TRUE'){
localStorage['firstTimeLoad']='TRUE';
$state.go('splash');
}
else {
$state.go('home');
}
所以我可能在这里做错了什么,我想知道我怎么能只展示一次页面(第一次访问!)而不再是......
答案 0 :(得分:2)
当前在启动画面控制器中的代码可能属于主控制器:
if (localStorage['firstTimeLoad']!='TRUE'){
localStorage['firstTimeLoad']='TRUE';
$state.go('splash');
}
else {
$state.go('home');
}
如果上面的代码位于启动画面控制器中,则只要用户第一次进入启动画面,它就会将它们发送回启动画面。然后第二次将它们发送到Home(但是你仍然从启动画面开始,所以在你将它们发送到Home之前可能还有延迟?)。
此外,似乎主控制器中当前的代码应该在您的路径文件中:
$urlRouterProvider.otherwise("/splash");
编辑:根据评论,没有主控制器(即您称之为路由提供商的控制器)。因此,重定向逻辑可以进入您的Home控制器。但是如果你想将它保存在启动画面控制器中,我认为那里有setTimeout
- 它位于何处?看起来您的逻辑需要是这样的:
if (localStorage['firstTimeLoad']!='TRUE'){
localStorage['firstTimeLoad']='TRUE';
$timeout(function() {
// Show the current splash screen for some time, then redirect
$state.go('home');
}, delayTimeInMilliseconds);
}
else {
$state.go('home');
}
但如果您显示更多代码,我们可能会提供更好的帮助。
编辑:上面的代码适用于我,但由于它在启动画面控制器中执行,即使if
语句的第二个分支执行(导致立即重定向到{ {1}})在重定向完成之前,启动屏幕仍然可以呈现并显示几分之一秒。快速解决方法可能是设置变量home
:
showSplashScreen
然后在最外面使用if (localStorage['firstTimeLoad']!='TRUE'){
localStorage['firstTimeLoad']='TRUE';
$scope.showSplashScreen = true;
$timeout(function() {
// Show the current splash screen for some time, then redirect
$state.go('home');
}, delayTimeInMilliseconds);
}
else {
$state.go('home');
}
你的初始屏幕模板的元素。否则,重定向逻辑应该移动到别处(可能进入路由器本身,作为Home路由或父路由上的ng-if = "showSplashScreen"
属性,或甚至移动到Home控制器中),这样您甚至不会进入启动屏幕控制器,如果用户已经访问过该站点。