为什么角度重定向到路线但加载错误的视图

时间:2014-11-13 14:08:38

标签: javascript angularjs angularjs-routing

我有一个基本的需求,我想用路线来解决:

  1. 定义了一堆路线
  2. 如果用户未经过身份验证,则会将其重定向到登录页面
  3. 我的问题是,第一次显示网络应用,用户似乎被正确重定向,因为 URI正确,但不是显示的视图(它对应于默认视图。)

    I've created a jsbin,如果您希望真实地看到它。 result can be viewed here

    重现的步骤:

    1. 加载页面
    2. 您会看到 needsAuth ,这意味着即使URI包含 login (对应于视图{{1),也会显示视图needsAuth的内容}})
    3. 重新加载页面
    4. 您会看到' login',表示视图的内容login
    5. HTML代码:

      login

      以下是javascript代码:

      <!DOCTYPE html>
      <html ng-app='app'>
      <head>
        <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.js"></script>
        <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular-route.js"></script>
        <meta charset="utf-8">
        <title>JS Bin</title>
      </head>
      <body>
        <div ng-view>
        </div>
      </body>
      </html>
      

      在第一次加载时,您可以看到URI和内容不匹配 Result on first load

      如果我重新加载页面,一切都按预期工作: Result after reloading the page

      我做错了吗?如果是这样的话,在某些条件下重定向用户的正确方法是什么?

      [编辑]:Angular 1.2.26似乎在这种情况下表现正确,但不是角度1.3.2

1 个答案:

答案 0 :(得分:6)

更改

function registerRedirection($rootScope, $location){
   $rootScope.$on('$routeChangeStart', function(event, next){
       $location.path('/login');
   });
}

function registerRedirection($rootScope, $location){
   $rootScope.$on('$locationChangeStart', function(event, next){     

                     ^ change this ^    

       $location.path('/login');
   });
}

然后您的初始加载正常工作。