2016-05-03 4 views
1

Хорошо, я пытаюсь передать постоянное значение AngularJS в соответствии с Директивой. Я делаю это, чтобы иметь несколько постоянных значений, которые я могу изменить позже в процессе разработки.AngularJS, проходящие константы в атрибуте

Константы определены как следует:

TLKApp.constant("NOBILITY", 
{ 
    "Soldier": 0, 
    "Knight": 1, 
    "Duke": 2 
}); 
TLKApp.constant("NOBILITY_LEVEL_SOLDIER", 0); 
TLKApp.constant("NOBILITY_LEVEL_KNIGHT", 1); 
TLKApp.constant("NOBILITY_LEVEL_DUKE", 2); 

Это вдвое больше, потому что я хотел либо дело работать, но никто не делает.

директива:

TLKApp.directive("foldOutMenuDirective", [ '$rootScope', '$parse', function($rootScope, $parse) { 
return { 
    scope: { 
     title: '@', 
     items: '=', 
     nobility: '=?' 
    }, 
    templateUrl: 'HTML/Directives/FoldOutMenu.html', 
    link: function(scope, elm, attrs, ctrl) { 
     console.log("Nobility on attribute: "+$parse(attrs.nobility)(scope.$parent)); 
    } 
}; 
}]); 

HTML-:

<fold-out-menu-directive title="Account" items="AccountMenuItems" nobility="NOBILITY_LEVEL_SOLDIER"></fold-out-menu-directive> 

NOBILITY_LEVEL_SOLDIER будет напечатано как определено. Мой вопрос: как передать эту константу в директиву, пока она отображается как правильное значение? Кроме того, я предпочел бы использовать NOBILITY.Soldier над NOBILITY_LEVEL_SOLDIER, но это, похоже, еще больше беспокоит.

Моя единственная работа вокруг до сих пор было так:

TLKApp.controller('NavigationMenuCtrl', ['$scope','NOBILITY','NOBILITY_LEVEL_SOLDIER', function($scope, NOBILITY, NOBILITY_LEVEL_SOLDIER) { 
$scope.NobilitySoldier = NOBILITY_LEVEL_SOLDIER; 

И в HTML обратитесь к NobilitySoldier, но это поражения цели одной константой.

ответ

0

вы можете использовать $ инжектор. Он позволяет вам вручную вводить услуги или другие компоненты. Попробуйте что-то вроде этого.

return { 
    scope: { 
     title: '@', 
     items: '=', 
     nobility: '=?' 
    }, 
    templateUrl: 'HTML/Directives/FoldOutMenu.html', 
    link: function(scope, elm, attrs, ctrl) { 
     var nobil = $injector.get(attr.nobility); // nobil will be your constant   
    } 
}; 
+1

Я хотел бы поблагодарить. Я очень расстроился, что не смог найти решение, и это работает отлично. AngularJS довольно большой, чтобы попасть. – JelleFm