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
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;
};
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.
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.