これが簡単な解決策です。
まず、$routeProvider 構成にビューの名前を追加しました。たとえば、ルート '/login/:arg1/with/:arg2' の名前を 'view_name' に定義しました。
myApp.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/login/:arg1/with/:arg2', {
templateUrl: 'app/common/login/login.tpl.html',
name: 'my_view_name'
}).
次に、ビュー名を正しい URL に動的に変換するディレクティブを作成しました。
myApp.directive('viewUrl', function ($route) {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
var splitArgs = attrs.viewUrl.split(' ');
var view_name = splitArgs.shift();
var url="route not found";
for(var route in $route.routes){
if ($route.routes[route].name == view_name){
url = route;
}
}
for (var arg in splitArgs) {
keyValue = splitArgs[arg].split(':');
url = url.replace(":"+keyValue[0], keyValue[1]);
}
elem.prop('href', url);
}
}
});
次のように、html コンポーネントで view-url 属性を使用できるようになりました。
<a view-url="my_view_name arg1:value1 arg2:value2">Hello World</a>
これにより、リンクに href 要素が追加され、次の結果が得られます。
<a view-url="my_view_name arg1:value1 arg2:value2" href="/login/value1/with/value2">Hello World</a>
置換関数を使用しているため、引数の名前に注意してください。