好吧,我正在尝试将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 :(得分:0)
你可以使用 $ injector 。它允许你手动注入服务或其他组件。就像这样。
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
}
};