Hallo, ich habe mir ein paar Videos von angle.js angesehen und festgestellt, dass mit der Methode value () eine Art modulweite Konstante festgelegt wurde. Zum Beispiel kann man die Konfiguration der Angular-UI-Bibliothek wie folgt einstellen: (Coffeescript)
angular.module('app',[])
.value "ui.config",
tinymce:
theme: 'simple'
width: '500'
height: '300'
Und meine App sieht derzeit so aus:
window.app = angular.module("app", [ 'ui'])
.config(["$routeProvider", ($routeProvider) ->
$routeProvider
.when "/users",
templateUrl: "assets/templates/users/index.html"
controller: IndexUsersCtrl
.otherwise redirectTo: "/users"
])
.value 'csrf', $('meta[name="csrf-token"]').attr('content') #<---- attention here
IndexUsersCtrl = ($scope) ->
$scope.users = gon.rabl
console.log "I want to log the csrf value here" #<---- then attention
IndexUsersCtrl.$inject = ['$scope']
Aber ich kann diesen Wert scheinbar nicht durch Tippen auf die 'App'-Variable erhalten, die dem App-Modul entspricht.
Ich habe hier auf ST und in der Google-Gruppe von angularjs nachgelesen, dass eine Möglichkeit, gemeinsamen Code zwischen zwei Controllern zu teilen, ein Dienst ist. Wird dieses Konzept auch hier gelten?
Vielen Dank!
javascript
angularjs
Nik So.
quelle
quelle
Antworten:
Module.value(key, value)
wird verwendet, um einen bearbeitbaren WertModule.constant(key, value)
zu injizieren , wird verwendet, um einen konstanten Wert zu injizierenDer Unterschied zwischen den beiden ist nicht so groß, dass Sie "eine Konstante nicht bearbeiten können", sondern vielmehr, dass Sie eine Konstante nicht mit $ supply abfangen und etwas anderes injizieren können.
quelle
Ich wollte diese Funktion kürzlich mit Karma in einem Test verwenden. Wie Dan Doyon betont, besteht der Schlüssel darin, dass Sie einen Wert wie einen Controller, einen Dienst usw. einfügen. Sie können .value auf viele verschiedene Typen einstellen - Zeichenfolgen, Arrays von Objekten usw. Zum Beispiel:
myvalues.js eine Datei mit Wert - stellen Sie sicher, dass sie in Ihrer Karma Conf-Datei enthalten ist
]);
test / spec / mytest.js - Vielleicht ist dies eine von Karma geladene Jasmine-Spezifikationsdatei
quelle
Sie müssen
csrf
in Ihrem Controller referenzierenIndexUsersCtrl = ( $scope, csrf )
quelle