如果没有设置翻译cookie,如何在Angular中重定向?

时间:2015-05-06 14:04:33

标签: angularjs cookies angular-translate

我想将用户重定向到语言页面,如果他还没有选择语言,则不允许他访问索引页面。我正在使用Angular Translate模块。此模块内置cookie,使用以下功能:

$translateProvider.useCookieStorage();

这很有效。现在我想知道是否设置了此cookie,如果没有,则将用户重定向到语言页面。我的想法是如何解决这个问题。

.factory('cookiecheck', function(){
  if($translateProvider.CookieStorage.get) return true;
  return false;
}


.run(function($rootScope, $state){

if(cookiecheck
            {$location.path('/language');}
    else
            {$location.path('/home');}

这不起作用。我怎么能最好地接近这个?确定CookieStorage是否存在并重定向的正确语法是什么?

1 个答案:

答案 0 :(得分:1)

您发布的代码中存在一些语法错误,因为您可以将$translate服务注入到运行块中,因此不需要工厂。

.run(function($rootScope, $state, $location, $translate) {
    var store = $translate.storage();
    // if store is empty?
    if(angular.equals(store, {}))){
        $location.path('/language');
    }
    else {
        $location.path('/home');
    }
});

有关cookie商店的信息,请参阅ng-translate docs

此外,由于您不知道cookie是否以及何时过期或删除,我认为最好先查看更改路线并进行检查。

要从运行块中的ui路由器挂钩到$stateChangeStart事件

    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
        // check then redirect
    });

ui router docs

请参阅此post了解路线更改