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

How to redirect in Angular if translate cookie is not set?

我想将用户重定向到一个语言页面,如果他还没有选择语言,则不允许他进入索引页面。我正在使用 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 是否存在并重定向的正确语法是什么?

您发布的代码中有一些语法错误,工厂不是必需的,因为您可以将 $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');
    }
});

请参阅 ng-translate docs 了解 cookie 存储

此外,由于您不知道 cookie 是否以及何时会过期或删除,我认为最好观察路线的变化,然后进行检查。

在你的 运行 块

中从 ui 路由器挂钩到 $stateChangeStart 事件
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
        // check then redirect
    });

ui router docs

查看此post 以查看路线变化