加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 根据条件重定向到某个路由

发布时间:2020-12-17 09:23:06 所属栏目:安全 来源:网络整理
导读:我写了一个小的AngularJS应用程序,它有一个登录视图和主视图,配置如下: $routeProvider .when('/main',{templateUrl: 'partials/main.html',controller: MainController}) .when('/login',{templateUrl: 'partials/login.html',controller: LoginControll
我写了一个小的AngularJS应用程序,它有一个登录视图和主视图,配置如下:
$routeProvider
 .when('/main',{templateUrl: 'partials/main.html',controller: MainController})
 .when('/login',{templateUrl: 'partials/login.html',controller: LoginController})
 .otherwise({redirectTo: '/login'});

我的LoginController检查用户/传递组合,并在$ rootScope上设置一个属性反映这一点:

function LoginController($scope,$location,$rootScope) {
 $scope.attemptLogin = function() {
   if ( $scope.username == $scope.password ) { // test
        $rootScope.loggedUser = $scope.username;
        $location.path( "/main" );
    } else {
        $scope.loginError = "Invalid user/pass.";
    }
}

一切正常,但如果我访问http:// localhost /#/ main我最终绕过登录屏幕。我想写的东西,比如“每当路由更改,如果$ rootScope.loggedUser为null,然后重定向到/ login”

… …

…等待。我可以听路由更改吗?我会发布这个问题反正和继续寻找。

经过一些潜水通过一些文档和源代码,我想我得到它的工作。也许这对别人有用吗?

我添加了以下到我的模块配置:

angular.module(...)
 .config( ['$routeProvider',function($routeProvider) {...}] )
 .run( function($rootScope,$location) {

    // register listener to watch route changes
    $rootScope.$on( "$routeChangeStart",function(event,next,current) {
      if ( $rootScope.loggedUser == null ) {
        // no logged user,we should be going to #login
        if ( next.templateUrl == "partials/login.html" ) {
          // already going to #login,no redirect needed
        } else {
          // not going to #login,we should redirect now
          $location.path( "/login" );
        }
      }         
    });
 })

一个似乎奇怪的事情是,我不得不测试部分名称(login.html),因为“下一个”Route对象没有url或其他东西。也许有更好的方法?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读