【问题标题】:Angular JS - dynamic url params and custom url access redirectAngular JS - 动态 url 参数和自定义 url 访问重定向
【发布时间】:2014-03-28 10:53:10
【问题描述】:

我只是想让这个工作:

 .....
   .when('/channel/:id/:slug',{
            templateUrl:'views/channel/index.html',
            controller:'Channel',
            publicAccess:true,
            sessionAccess:true
          })
   .....
    app.controller('Channel', ['$scope','$routeParams', function ($scope,$routeParams) {

    }]);


    app.run(function($rootScope, $location, $route) {

      var routesOpenToSession = [];

      angular.forEach($route.routes, function(route, path) {
        console.log(path);
        console.log(route);
        route.sessionAccess && (routesOpenToSession.push(path));
      });

      $rootScope.$on('$routeChangeStart', function(event, nextLoc, currentLoc) {

        var closedToSession = (-1 === routesOpenToSession.indexOf($location.path()));

        if(closedToSession && $rootScope.session.id_user) {
          $location.path('/');
        }
      });
    });

如果$rootScope.session.id_user 存在且sessionAccess:true,为什么我也无法通过site.com/channel/9/my-slug 访问该页面?

我被重定向到 / ,而任何其他静态 url 都可以使用 sessionAccess:true 例如 channel/staticparam 可以,但使用动态参数它将无法工作

这是控制台日志结果:

【问题讨论】:

  • 'channel' != 'channels'
  • 网址中有错字。第一眼
  • 对不起,一个错字,我还添加了重定向的主要原因!
  • 没有考虑很多BL逻辑,你有没有同样的问题,什么时候尝试打开一个路由?你在使用 html5mode,它会忽略 url 中的哈希 #?
  • 我开始相信 closedToSession 始终为真,+ session id 对象为真。 plnkr.co/edit/B4glcHZwht48wezJ5NiE?p=preview 我创建了一个示例。也许它会帮助你理解这个问题

标签: javascript angularjs dynamic url-routing url-parameters


【解决方案1】:

对这个愚蠢的问题表示抱歉:

/*Not logged redirects*/
app.run(['$rootScope','$location','$route', function ($rootScope, $location,$route) {

   var routesOpenToPublic = [];

    angular.forEach($route.routes, function (route, path) {

      if(route.publicAccess){ routesOpenToPublic.push(route.regexp); }

    });

    $rootScope.$on('$routeChangeStart', function (event, nextLoc, currentLoc) {

     var next_url_regexp = nextLoc.$$route.regexp;
    //redirect for not logged users users
     if(routesOpenToPublic.indexOf(next_url_regexp) < 0){

      $location.path('/auth/login');

     }

    });
}]);
/*Logged redirects*/
app.run(['$rootScope','$location','$route', function ($rootScope, $location, $route) {

  if($rootScope.session && $rootScope.session.id_user){

    var routesOpenToSession = [];

    angular.forEach($route.routes, function (route, path) {

      if(route.sessionAccess){ routesOpenToSession.push( route.regexp);}

    });

    $rootScope.$on('$routeChangeStart', function (event, nextLoc, currentLoc) {

     var next_url_regexp = nextLoc.$$route.regexp;
    //redirect for not allowed session users
     if(routesOpenToSession.indexOf(next_url_regexp) < 0){

      $location.path('/');

     }

    });
  }

 }]);

我需要检查路由正则表达式而不是静态 url 路径

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多