繁体   English   中英

AngularJS:了解$ rootScope。$ on('$ routeChangeSuccess

[英]AngularJS: Understanding $rootScope.$on('$routeChangeSuccess

我正在登录页面,成功后,它重定向到主页。 默认情况下,我显示登录页面此代码:

app.run(function($rootScope, $location) {
  $rootScope.$on('$routeChangeSuccess', function() {
      $location.url("/login");
  });
});

然后在验证后端的用户/传递详细信息后,我将用户带到主页:

$scope.login = function() {
    if ($scope.username === 'admin' && $scope.password === 'pass') {
      console.log('successful')
      $rootScope.$on('$routeChangeSuccess', function() {
          $location.url("/home")
      });
      $location.url("/blah");
    } else {
      $scope.loginError = "Invalid username/password combination";
      console.log('Login failed..')
    };
  };

如果我删除if语句的else部分之前的第二个$location.url ,则重定向似乎不起作用。 然而,它没有使用该网址( /blah ),它home 但如果删除了url blah ,则重定向逻辑不起作用。

我似乎无法理解为什么我必须使用两个$location.url() 如果有人能帮助我理解这个重定向系统是如何工作的,我会觉得有用吗?

这可能不是最好的做法,我愿意接受如何改进的建议,这里是Plunker的例子

总而言之,这是一条错误的道路IMO ......

显然你需要锁定任何资源服务器端,因为客户端总是可以在一个简单的调试器中“改变”...但我想你已经知道了......

替代路由解决方案,如https://github.com/dotJEM/angular-routinghttps://github.com/angular-ui/ui-router IMO为您提供了一些更好的处理,但我们只是评估一些方法.. 。

其中之一是: http://plnkr.co/edit/ZUKB1v?p=preview虽然这需要你解决用户所有路线...所以..:(...另一个办法是: HTTP:// plnkr。 co / edit / iM9cA1?p =预览可能会好一点......

最后,人们经常做的是提供http拦截器,当从服务器返回“未授权”错误代码时,它会重定向到登录页面。 但这似乎是一种比你想象的更先进的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM