私は単にこれを設定しています:
app.config(['$routeProvider',function($routeProvider) {
$routeProvider
.when('/asd/:id/:slug',{
templateUrl:'views/home/index.html',
controller:'Home',
publicAccess:true,
sessionAccess:true
});
:idおよび:slugは動的パラメーターです。
次に、そのルートをcheck if current url matches
したいと思います(/asd/:id/:slug
)
たとえば、URL:asd/5/it-is-a-slug
最も簡単な方法はどれですか?
私はこれを試しました:
$rootScope.$on('$routeChangeStart', function(){
console.log($route.current);
});
しかし、ページルートを切り替えると、コンソールに何も返されない場合があります
現在のルートでは、正規表現を使用できます。注入$route
サービスを提供し、現在のルートオブジェクトを探索します。つまり、regexp
の部分:
$route.current.regexp
これは、それをどのように使用できるかです(動的メソッドを含む現在のメニュー項目をアクティブ化する必要があるかどうかを確認するコントローラーメソッドの例):
$scope.isActive = function (path) {
if ($route.current && $route.current.regexp) {
return $route.current.regexp.test(path);
}
return false;
};
あなたはこのようなことを試すことができます:
$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);
}
]
}
});
次にSecurityFactory内で、パラメーターの有効性を確認できます。たとえばRegExpを使用します。
あまりエレガントなソリューションではありません。Chrome DevToolsでのみテストしましたが、動作するようです:
Object.getPrototypeOf($route.current) === $route.routes['/asd/:id/:slug'];
$ routesサービスのroutesプロパティは、各ルートのパターンにキーが設定されたオブジェクトリテラルのようです。
他の人がこれを使用したい場合は、'/asd/:id/:slug'
をルートを定義したときに使用したパターンに置き換えてください。
また、otherwise
パスと一致させる場合は、$route.routes['null']
を使用します
免責事項:これは私が見つけた回避策であり、私にとっては有効です。この動作は文書化されておらず、すべてのシナリオで機能するかどうかを確認するためにテストしなかったので、自己責任で使用してください。