有没有办法通过$ routeProvider将URL附加到控制器,而不是硬编码href属性中的URL?如果修改$ routeProvider中的路由,则必须修改模板中所有硬编码的URL,这些URL效率不高。
例如,Django Framework提供了“reverse()”实用程序函数和“url”模板标记,它给出了“controller”(视图函数)和URL参数,它返回了相关的URL。
答案 0 :(得分:3)
没有内置方法可以执行此操作,但您可以使用提供反向网址的angular.named-routes。
$ routeProvider:
$routeProvider.when("/product/:id/:slug", {
templateUrl: "/product.html",
controller: "ProductController",
name: "product-detail"
});
$locationProvider.html5Mode(true);
$范围
{product: {id: 1, name: "Awesome Product", slug: "awesome-product"}}
从模板反向执行:
<a data-named-route="product-detail" data-kwarg-id="{{ product.id }}" data-kwarg-slug="{{ product.slug}}">{{ product.name }}</a>
应该变成:
<a href="/product/1/awesome-product">Awesome Product</a>
答案 1 :(得分:0)
是的,但没有内置方法可以做到这一点。因为即使控制器可能绑定到$ routeProvider,它也不必。实现它的一种方法是使所有控制器继承自BaseController。这个BaseCtrl将属性“currentUrl”注入范围。
myApp.controller("BaseCtrl" ,function ($scope, $location) {
});
myApp.controller("AnyCtrl" ,function ($scope, $location) {
//inherit from base
$injector.invoke(function ($controller) { $controller('BaseCtrl', {$scope: $scope}); });
});
实现它的另一种方法是每次路由更改时通过更改$ rootScope.currentUrl来“污染”(因此不是一个好主意但会起作用)$ rootScope。由于所有范围都继承自$ rootScope,因此变量$ scope.currentUrl将始终可用并且最新可用于您想要的任何视图。