如何消除Angular中的毛刺/延迟?

时间:2017-04-12 11:51:41

标签: javascript angularjs ionic-framework

我正在使用此代码仅在用户第一次访问应用时显示启动画面。这部分工作,但它无法正常工作。

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

主控制器:

$urlRouterProvider.otherwise("/splash");

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

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

我的问题是:如何摆脱这种延迟/故障?如果用户可以看到它不再需要看到的东西,我发现它非常不专业。

4 个答案:

答案 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'); 
    }
  }
})

onStateChangeStart

$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'); 
   }
}
})

它经过测试的代码并且工作得非常好。