2013-10-25 6 views
2

Есть ли способ добавить дополнительные параметры в $ routeProvider и получить эти параметры в директиве? Мне нужно это, потому что переменная имеет значение для страницы.AngularJS Как получить дополнительные параметры маршрута

Я хотел бы добавить параметр Pagename к 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: [. $ Расположение $$ путь]

Вы можете получить переменные в маршрутизации с вар Pagename = $ route.routes .pageName;

ответ

2

Вы можете найти информацию в $ route.routes [uri].

я поделюсь с вами моей службы viewRouter как Exemple:

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

Exemple декларации по маршруту:

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 с var pageName = $ route.routes [$ location. $$ path] .pageName; – Ruud

Смежные вопросы