Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么angular重定向到路线,但加载了错误的视图_Javascript_Angularjs_Angularjs Routing - Fatal编程技术网

Javascript 为什么angular重定向到路线,但加载了错误的视图

Javascript 为什么angular重定向到路线,但加载了错误的视图,javascript,angularjs,angularjs-routing,Javascript,Angularjs,Angularjs Routing,我有一个基本的需要,我想通过路线解决: 定义了一系列路线 如果用户没有经过身份验证,那么他将被重定向到登录页面 我的问题是,第一次显示web应用时,用户似乎被正确重定向,因为URI是正确的,而不是显示的视图(它对应于默认视图) 如果你想亲眼看到的话。这个 复制步骤: 加载页面 您可以看到needsAuth,这意味着即使URI包含login(对应于视图login),也会显示视图needsAuth的内容 重新加载页面 您会看到“login”,这意味着视图的内容login HTML代码: <!D

我有一个基本的需要,我想通过路线解决:

  • 定义了一系列路线
  • 如果用户没有经过身份验证,那么他将被重定向到登录页面
  • 我的问题是,第一次显示web应用时,用户似乎被正确重定向,因为URI是正确的,而不是显示的视图(它对应于默认视图)

    如果你想亲眼看到的话。这个

    复制步骤:

  • 加载页面
  • 您可以看到needsAuth,这意味着即使URI包含login(对应于视图
    login
    ),也会显示视图
    needsAuth
    的内容
  • 重新加载页面
  • 您会看到“login”,这意味着视图的内容
    login
  • HTML代码:

    <!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和内容不匹配

    如果我重新加载页面,则一切正常:

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

    [编辑]:Angular 1.2.26在这种情况下似乎表现正确,但Angular 1.3.2没有改变

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

    然后您的初始负载正常工作

    变化

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



    然后您的初始负载正常工作

    为什么要将所有请求重定向到登录页面?您的控制器和运行声明都很奇怪,从未见过类似的情况,可能尝试直接在声明下编写代码,而不是使用functions@anguLaravel因为它不是真正的代码,只是复制bug的最小代码。在真实的例子中,我正在测试用户是否经过身份验证,如果不是,则重定向。@Charlie:是一样的,而且更清晰。你可以看一下这些指南来了解更多:Angular 1.3不再适用于控制器的函数偏差。为什么你要将所有请求重定向到登录页面?你的控制器和运行声明很奇怪,从未见过这样的东西,可能尝试直接在声明下编写代码,而不是使用functions@anguLaravel因为它不是真正的代码,只是复制bug的最小代码。在真实的例子中,我正在测试用户是否经过身份验证,如果不是,则重定向。@Charlie:是一样的,而且更清晰。你可以看看这些指南来了解更多:Angular 1.3不再适用于控制器的功能偏差。我看不出你改变了什么!你忘了什么吗?对不起,应该说得更清楚些!将$routeChangeStart更改为$LocationChangeStart,然后请授予答案。这样做将有助于未来的其他人。这个答案对我来说也很有用,你能详细说明一下它的实际作用吗?非常感谢。为什么会发生这种奇怪的重定向?我看不出你改变了什么!你忘了什么吗?对不起,应该说得更清楚些!将$routeChangeStart更改为$LocationChangeStart,然后请授予答案。这样做将有助于未来的其他人。这个答案对我来说也很有用,你能详细说明一下它的实际作用吗?非常感谢。为什么会出现这种奇怪的重定向?
    function registerRedirection($rootScope, $location){
       $rootScope.$on('$locationChangeStart', function(event, next){     
    
                         ^ change this ^    
    
           $location.path('/login');
       });
    }