无需预加载即可使AngularJS Transition更清洁

时间:2015-08-13 19:08:12

标签: javascript angularjs

我记得读过如何确保角度不会在最终渲染之前预加载{{}}和其他各种位数几毫秒的指南,但我无法将其挖掘出来。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

您可以使用ui-route的$ stateChangeStart事件来检查用户是否尝试进入需要身份验证的状态。您需要在应用的运行阶段收听该事件,您可以查看以下内容。

angular.module("yourApp").run(function($rootScope, $state){
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
         if(toState === "yourStateWhichRequiresAuthentication" && authenticationFailed){
         event.preventDefault();
         $state.go("loginState");

}         })     });

更好的是,您可以向状态添加数据并定义哪些状态需要身份验证,并使用该数据值检查toState是否需要身份验证,如下所示:

//Data Definition in your state definition
$stateProvider
  .state("main", {
    url: "main",
    template: "<div>Main State</div>",
    data: {needsAuthentication: true})

if (toState.data && toState.data.needsAuthentication) {
   if (!$rootScope.isAuthenticated()) { // user is not logged in
      event.preventDefault();
      $state.go("login");
   }
}