AngularJS:理解 $rootScope.$on('$routeChangeSuccess

标签 angularjs redirect angular-routing

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

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..')
    };
  };

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

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

这可能不是最佳实践,我愿意接受有关如何改进的建议,这里是 Plunker example

最佳答案

总而言之,这在 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=preview这可能会好一点...

最后,人们似乎经常做的是提供 http 拦截器,当从服务器返回“未经授权”错误代码时重定向到登录页面。但这似乎是一种比您准备好的更高级的方法。

关于AngularJS:理解 $rootScope.$on('$routeChangeSuccess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833588/

相关文章:

javascript - Angular ngAfterViewInit() 找不到 DOM 元素

javascript - 从 FormController 获取表单控件

css - ng-leave 类没有得到应用

javascript - 单击按钮时不会调用函数,但会在表单加载时调用函数

jsf - JSF 中的条件重定向

.htaccess - .htaccess 中有巨大的重定向列表有问题吗?

javascript - Angular ng 在下拉列表中重复和过滤

基于 Referrer 的 JavaScript 重定向?

angular - 在 Angular 中保存/恢复路由器状态

angular - 在 Angular 的嵌套路由器导出中动态加载模块