gpt4 book ai didi

javascript - AngularJS 在属性中传递常量

转载 作者:行者123 更新时间:2023-11-28 06:04:30 26 4
gpt4 key购买 nike

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

最佳答案

您可以使用$injector。它可以让您手动注入(inject)服务或其他组件。尝试类似的操作。

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

关于javascript - AngularJS 在属性中传递常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37008778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com