AngularJS在属性中传递常量

时间:2016-05-03 15:51:55

标签: javascript angularjs angularjs-directive attributes

好吧,我正在尝试将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,但这会破坏单个常量的目的。

1 个答案:

答案 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        
    }
};