仅在首次访问Angular时显示页面的最佳方式是什么?

时间:2017-05-13 11:22:55

标签: javascript angularjs ionic-framework

我正在使用此代码仅在用户首次访问应用时显示splashscreen。这部分有效,但它无法正常工作。

当之前已经访问过该应用的用户再次访问时,它会首先显示启动画面仅1秒(所以延迟),然后才会(最终)进入主屏幕...所以它就像一个小故障。

主控制器:

$urlRouterProvider.otherwise("/splash");

在我的 splashscreen控制器中,我有这个:

  if (localStorage['firstTimeLoad']!='TRUE'){
        localStorage['firstTimeLoad']='TRUE';
        $state.go('splash'); 
    }
    else {
        $state.go('home');
    }

所以我可能在这里做错了什么,我想知道我怎么能只展示一次页面(第一次访问!)而不再是......

1 个答案:

答案 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控制器中),这样您甚至不会进入启动屏幕控制器,如果用户已经访问过该站点。