javascript - 使用 AngularJS 管理动态路由

标签 javascript angularjs routes

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

我正在使用ngRoute,如下所示:

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

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

    .otherwise({
        redirectTo: '/login'
    });

现在,如果用户登录后无法查看所有“公共(public)路由”(==用户无需身份验证即可查看的路由),我想将用户重定向到仪表板;如果未登录,则将其重定向到登录页面。

为此,我在 Angular 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 是一个常量,包含到 /的路由登录

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

  • run 是执行此检查的正确位置吗?(即使它正常工作,也许此检查应该放在其他地方)
  • 实现这一目标的最佳实践是什么?

在此检查中,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;
    };

其中CLEAN_ROUTES是一个数组,其中包含所有“公共(public)路线”。

    CLEAN_ROUTES = [
        '/login',
        '/forgotten-password',
        '/verify-code',
        '/reset-password',
        '/cookie-policy'
    ]

所以,最后一个问题是:

  • 是否有更智能的方法来使用 Angular 检查“公共(public)路线”?
  • 例如,如果我想为用户显示不同的登录模板,例如:

    /login?user=client
    /login?user=seller
    /login?user=editor
    /login?user=admin
    

有没有办法让ngRoute动态地做到这一点?

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

最佳答案

国际海事组织$httpProvider.interceptors是最有效的方法。

在 ngRoute 中你可以使用 -

$routeProvider -> '路线' -> resolve属性

关于javascript - 使用 AngularJS 管理动态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44909856/

相关文章:

javascript - Jquery 每个按值排序

javascript - 根据条件设置单元格值

javascript - Angular JS Ng-显示/Ng-隐藏

javascript - Angular 父范围变量未更改

javascript - 在 AWS CodeDeploy 中获取过时的实例

javascript - MooTools:元素处理

scala - 如何在查询参数中喷射解码列表

asp.net-mvc - Asp.Net MVC - "dynamic"路由的最佳方法

c# - ASP.NET MVC5 路由注释 MS_DirectRouteMatches

javascript - Pubnub - 取消订阅特定 channel 的所有活跃用户