Hola, estaba viendo un par de videos de angular.js y vi que el método value () se usó para establecer una especie de constante en todo el módulo. por ejemplo, uno puede establecer la configuración de la biblioteca Angular-UI así: (coffeescript)
angular.module('app',[])
.value "ui.config",
tinymce:
theme: 'simple'
width: '500'
height: '300'
Y mi aplicación actualmente se ve así:
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']
Pero parece que no puedo obtener ese valor tocando la variable 'aplicación' que corresponde al módulo de la aplicación.
Leí aquí en ST y en el grupo de Google de angularjs que una forma de compartir un código común entre controladores es a través de un servicio, ¿este concepto también se aplicará aquí?
¡Gracias!
javascript
angularjs
Nik So
fuente
fuente
Respuestas:
Module.value(key, value)
se usa para inyectar un valor editable,Module.constant(key, value)
se usa para inyectar un valor constanteLa diferencia entre los dos no es tanto que "no puedes editar una constante", es más que no puedes interceptar una constante con $ provide e inyectar algo más.
// define a value app.value('myThing', 'weee'); // define a constant app.constant('myConst', 'blah'); // use it in a service app.factory('myService', ['myThing', 'myConst', function(myThing, myConst){ return { whatsMyThing: function() { return myThing; //weee }, getMyConst: function () { return myConst; //blah } }; }]); // use it in a controller app.controller('someController', ['$scope', 'myThing', 'myConst', function($scope, myThing, myConst) { $scope.foo = myThing; //weee $scope.bar = myConst; //blah });
fuente
Recientemente, quise usar esta función con Karma dentro de una prueba. Como señala Dan Doyon, la clave es que inyectaría un valor como un controlador, servicio, etc. Puede establecer .value en muchos tipos diferentes: cadenas, matrices de objetos, etc. Por ejemplo:
myvalues.js es un archivo que contiene un valor; asegúrese de que esté incluido en su archivo karma conf
var myConstantsModule = angular.module('test.models', []); myConstantModule.value('dataitem', 'thedata'); // or something like this if needed myConstantModule.value('theitems', [ {name: 'Item 1'}, {name: 'Item 2'}, {name: 'Item 3'} ]);
]);
test / spec / mytest.js: tal vez este sea un archivo de especificaciones de Jasmine cargado por Karma
describe('my model', function() { var theValue; var theArray; beforeEach(module('test.models')); beforeEach(inject(function(dataitem,theitems) { // note that dataitem is just available // after calling module('test.models') theValue = dataitem; theArray = theitems; }); it('should do something',function() { // now you can use the value in your tests as needed console.log("The value is " + theValue); console.log("The array is " + theArray); }); });
fuente
Necesitas hacer referencia
csrf
en tu controladorIndexUsersCtrl = ( $scope, csrf )
IndexUsersCtrl.$inject = [ '$scope', 'csrf' ]
fuente