来自Django世界,我只是喜欢它关于URL的很酷的功能,它阻止我们在模板和文件中硬编码URL。的观点:
In urls.py:
url(r'/url/param1/param2/$', 'view_name', name="URL_NAME"),
In Template:
<a href="{% url "URL_NAME" @param1 ¶m2 ... %}">My link</a>
这样,如果我想更改此URL,我不必在多个文件中更改它。我想知道角度是否允许我们也这样做。现在我必须写这样的东西:
In my App:
when('/home', {
templateUrl: 'app/home/home.tpl.html'
}).
In my view:
<a href='#/home'>my link</a>
感谢您的帮助。
答案 0 :(得分:2)
这是一个简单的解决方案。
首先,我在$ 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>
在使用replace函数时,请注意参数的名称。