【问题标题】:Manage dynamic routes with AngularJS使用 AngularJS 管理动态路由
【发布时间】:2017-07-04 15:37:30
【问题描述】:

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

我正在像这样使用ngRoute

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

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

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

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

为此,我正在检查 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 是一个包含到/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 是一个数组,其中包含所有“公共路线”。

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

所以,这里是最后的问题:

  • 有没有更智能的方法来使用 Angular 检查“公共路线”?
  • 例如,如果我想为用户显示一个不同的登录模板,类似于:

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

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

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

【问题讨论】:

    标签: javascript angularjs routing


    【解决方案1】:

    IMO $httpProvider.interceptors 是最有效的方式。

    在 ngRoute 你可以使用 -

    $routeProvider -> 'route' -> resolve 属性

    【讨论】:

    • 所以你是说我应该在路由定义的resolve选项中使用interceptors,对吗?这也意味着对干净路由的检查应该在解析中进行,对吗?
    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多