2016-05-03 10 views
1

Okay, ich versuche, einen AngularJS konstanten Wert in Richtung einer Richtlinie zu übergeben. Ich mache das, um ein paar konstante Werte zu haben, die ich später in der Entwicklung ändern kann.AngularJS übergibt Konstanten in einem Attribut

Die Konstanten werden wie folgt definiert:

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

Dies ist doppelt, weil ich jeden Fall zu arbeiten, aber keiner wollte.

Die Richtlinie:

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

Die HTML:

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

NOBILITY_LEVEL_SOLDIER wird als undefiniert gedruckt werden. Meine Frage ist, wie übertrage ich diese Konstante in die Direktive, während sie als der richtige Wert angezeigt wird? Außerdem würde ich lieber NOBILITY.Soldier über NOBILITY_LEVEL_SOLDIER verwenden, aber das scheint noch mehr Ärger zu bereiten.

Meine einzige Arbeit um so war weit dies:

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

Und im HTML NobilitySoldier beziehen, aber diese Niederlagen der Zweck einer einzigen Konstante.

Antwort

0

können Sie $ Injector verwenden. Es können Sie manuell Dienste oder andere Komponenten injizieren.

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

Ich möchte mich ein kleines Dankeschön geben. Ich wurde wirklich frustriert, dass ich die Lösung nicht finden konnte und das funktioniert perfekt. AngularJS ist ziemlich groß, um hineinzukommen. – JelleFm

Verwandte Themen