有没有办法向 $routeProvider 添加额外的参数并在指令中检索这些参数?我需要这个,因为该变量是特定于页面的。
我想向路由提供者添加一个参数 pageName,如下所示:
$routeProvider
.when('/home',
{
controller: 'homeController',
templateUrl: '_templates/home.html',
pageName: 'home'
})
并在指令中使用这个额外的参数,如下所示
directives.dirPagename = ['$route', '$routeParams', function($route, $routeParams) {
return {
restrict: 'ECA',
template: 'test',
link: function (scope, elem, attrs) {
console.log($route);
console.log($routeParams);
}
}
}]
当我记录 $route 并在 google webdeveloper 工具中检查它时,pageName 参数有几层深。
Object {routes: Object, reload: function}
current: D
$$route: Object
controller: "homeController"
**pageName: "home"**
有没有办法直接获取这个变量或者这是完全错误的方法?
更新:
您可以通过以下方式获取路由中的变量 var pageName = $route.routes[$location.$$path].pageName;
最佳答案
您可以在$route.routes[uri]中找到该信息。
我与您分享我的 viewRouter 服务作为示例:
var uaViewRouter = angular.module('ua.ViewRouter', []);
uaViewRouter.service('uaViewProvider', function($route, $location, uaContext){
this.redirectToView = function(viewName){
url = undefined;
for(var route in $route.routes){
if ($route.routes[route].view == viewName){
url = route;
}
}
if(url == undefined){
throw("uaViewProvider: Undefined view " + viewName);
}
if($route.routes[url].enrichment == true){
url = url.replace(":operatorId", uaContext.operator.get().id);
url = url.replace(":productId", uaContext.product.get().id);
}
$location.path(url);
};
});
uaViewRouter.run(function($rootScope, uaViewProvider) {
$rootScope.uaViewProvider = {};
$rootScope.uaViewProvider.redirectToView = function(viewName) {
uaViewProvider.redirectToView(viewName);
};
});
路由声明示例:
uaApp.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/login', {
templateUrl: 'app/login/login.tpl.html',
loginRequired: false,
view: 'login'
}).
...
您可以通过调用以下方式在 Controller 或服务中使用它:
uaViewProvider.redirectToView('login');
或者在模板中:
<a href="" ng-click="uaViewProvider.redirectToView('login')">Click to login</a>
关于AngularJS 如何获取额外的路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596715/