Javascript 使用AngularJS管理动态路线

Javascript 使用AngularJS管理动态路线,javascript,angularjs,routing,Javascript,Angularjs,Routing,我有一个AngularJS应用程序(AngularV1),它可以安全登录。未经身份验证的用户只能看到登录页面、忘记密码页面和cookie策略 我使用的ngRoute如下: $routeProvider .when('/login:param', { templateUrl: 'app/login/login.html', controller: 'loginCtrl', controllerAs: 'vm' })

我有一个AngularJS应用程序(AngularV1),它可以安全登录。未经身份验证的用户只能看到登录页面、忘记密码页面和cookie策略

我使用的
ngRoute
如下:

    $routeProvider
    .when('/login:param', {
        templateUrl: 'app/login/login.html',
        controller: 'loginCtrl',
        controllerAs: 'vm'
    })

    /* ... other routes ... */

    .otherwise({
        redirectTo: '/login'
    });
现在,如果用户登录时无法查看所有“公共路由”(==用户无需身份验证即可查看的路由),我想将用户重定向到仪表板;如果未登录,则将其重定向到登录页面

为此,我正在执行签入角度
run
功能,并收听
$locationChangeStart
事件:

    $rootScope.$on('$locationChangeStart', function (event, next, current) {
        if (routeClean($location.path()) && AuthenticationService.isLoggedIn()) {
            $location.url(DASHBOARD);
        } else {
            $location.url(LOGIN);
        }
    });
其中,
DASHBOARD
是一个常量,包含到
/DASHBOARD
的路由;
LOGIN
是一个常量,包含到
/LOGIN
的路由

在继续之前,我有几个问题:

  • 执行此检查的正确位置是
    运行
    吗?
    (即使工作正常,也可能应该将此检查放在其他位置)
  • 实现这一目标的最佳做法是什么?
在此检查中,
AuthenticationService
是一项对用户进行身份验证的服务,而
routeClean
是一项检查路由是否在阵列内的功能:

    var routeClean = function (route) {
        for (var i = 0; i < CLEAN_ROUTES.length; i++) {
            var pattern = new RegExp(CLEAN_ROUTES[i]);
            var bool = pattern.test(route);
            if (bool)
                return true;
        }
        return false;
    };
最后的问题是:

  • 有没有更聪明的方法用Angular检查“公共路线”
  • 例如,如果我想为用户显示不同的登录模板,例如:

    /login?user=client
    /login?user=seller
    /login?user=editor
    /login?user=admin
    
有没有一种方法可以让
ngRoute
动态地做到这一点?

我的最新问题的意思是:例如,当用户注销应用程序时,我将他们重定向到
登录
常量(这是登录页面的一般路径
/LOGIN
),是否有办法区分卖家、客户、,等等,以便我可以将它们重定向到正确的登录模板/页面?

IMO是最有效的方法

在ngRoute中,您可以使用-

$routeProvider->‘route’->属性是最有效的方式

在ngRoute中,您可以使用-


$routeProvider->'route'->属性

那么您是说我应该在路由定义的resolve选项中使用
拦截器
,对吗?这也意味着清理路由的检查应该在解析中进行,对吗?所以你是说我应该在路由定义的解析选项中使用
拦截器
,对吗?这也意味着清洁路线的检查应该在解析中进行,对吗?
/login?user=client
/login?user=seller
/login?user=editor
/login?user=admin