Angular js-vérifiez si l'url courante correspond à la route (avec des params d'url dynamiques ) )

je suis tout simplement en faisant ce paramètre:

app.config(['$routeProvider',function($routeProvider) {
  $routeProvider
  .when('/asd/:id/:slug',{
    templateUrl:'views/home/index.html',
    controller:'Home',
    publicAccess:true,
    sessionAccess:true
  });

: id et: slug sont des params dynamiques.

Maintenant, je voudrais check if current url matches cette route (/asd/:id/:slug)

par exemple l'url : asd/5/it-is-a-slug

qui est la façon la plus simple?

j'ai essayé ceci :

$rootScope.$on('$routeChangeStart', function(){ 
   console.log($route.current); 
});

mais parfois il ne retourne rien dans la console en changeant les routes de page

14
demandé sur sbaaaang 2014-03-02 17:45:49

3 réponses

itinéraire Actuel vous permet d'utiliser l'expression régulière. Injecter $route service et exploration de l'objet route courante. regexp partie:

$route.current.regexp

Voici comment vous pouvez l'utiliser (exemple de la méthode controller pour vérifier si l'élément courant du menu (qui a des parties dynamiques) doit être activé):

$scope.isActive = function (path) {
    if ($route.current && $route.current.regexp) {
        return $route.current.regexp.test(path);
    }
    return false;
};
25
répondu dfsq 2014-03-02 14:27:24

Vous pouvez essayer quelque chose comme ceci:

  $routeProvider.when('/asd/:id/:slug', {
    templateUrl: '/views/template.html',
    controller: 'YourController',
    resolve: {
      data: ['$route', 'SecurityFactory',
        function ($route, SecurityFactory) {

          var id= parseInt($route.current.params.id, 10);
          var slug= $route.current.params.slug;

          SecurityFactory.checkParams(id, slug);
        }
      ]
    }
  });

puis à l'intérieur du SecurityFactory vous pouvez vérifier la validité des paramètres. Par exemple avec RegExp.

1
répondu tomepejo 2014-03-02 14:03:28

pas une solution très élégante, et je l'ai seulement testé dans des DevTools Chrome, mais il semble fonctionner:

Object.getPrototypeOf($route.current) === $route.routes['/asd/:id/:slug'];

il semble que la propriété routes du service $ routes soit un objet littéral avec les touches définies aux patterns pour chaque route.

pour les autres qui veulent utiliser ceci, il suffit de remplacer '/asd/:id/:slug' avec le motif que vous avez utilisé lorsque vous avez défini votre itinéraire.

aussi si vous voulez faire correspondre le otherwise chemin d'accès, il suffit d'utiliser $route.routes['null']

Avertissement: C'est juste un contournement que j'ai trouvé et qui fonctionne pour moi. Étant donné que ce comportement n'est pas documenté, et que je ne l'ai pas testé pour voir s'il fonctionne dans tous les scénarios, utilisez-le à vos propres risques.

0
répondu Tiborg 2015-07-29 17:40:26