2013-10-25 26 views
2

有没有办法将额外的参数添加到$ routeProvider并在指令中检索这些参数?我需要这个,因为这个变量是页面特定的。AngularJS如何获得额外的路线参数

我想一个参数页面名称添加到routeprovider像这样:

$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); 
     } 
    } 
}] 

,并检查该在google webdeveloper工具里面,pageName参数是几层深的。

Object {routes: Object, reload: function} 
    current: D 
     $$route: Object 
      controller: "homeController" 
      **pageName: "home"** 

有没有办法直接得到这个变量,或者这是完全错误的路?

UPDATE:[$位置$$路径]

你可以得到的变量与 VAR页面名称= $ route.routes路由.pageName;

回答

2

您可以在$ 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' 
     }). 
... 

您可以在控制器或服务使用它:

uaViewProvider.redirectToView('login'); 

或在模板中:

<a href="" ng-click="uaViewProvider.redirectToView('login')">Click to login</a> 
+0

感谢您的回答,我收到了正确的变数 var pageName = $ route.routes [$ location。$$ path] .pageName; – Ruud