这是一个简单的解决方案。
首先,我在 $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>
当我使用替换函数时,请注意参数的名称。