Привет, я смотрел пару видеороликов angular.js и увидел, что метод value () использовался для установки своего рода постоянной для всего модуля. например, можно настроить конфигурацию библиотеки Angular-UI следующим образом: (coffeescript)
angular.module('app',[])
.value "ui.config",
tinymce:
theme: 'simple'
width: '500'
height: '300'
И мое приложение в настоящее время выглядит так:
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']
Но я не могу получить это значение, нажав на переменную app, которая соответствует модулю приложения.
Я читал здесь на ST и в группе google angularjs, что один из способов поделиться общим кодом контроллеров btwn - через службу, будет ли эта концепция применяться здесь тоже?
Благодарность!
javascript
angularjs
Ник Со
источник
источник
Ответы:
Module.value(key, value)
используется для ввода редактируемого значения,Module.constant(key, value)
используется для ввода постоянного значенияРазница между ними не столько в том, что вы «не можете редактировать константу», сколько в том, что вы не можете перехватить константу с помощью $ provide и ввести что-то еще.
// 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 });
источник
Недавно я хотел использовать эту функцию с Karma в тесте. Как указывает Дэн Дойон, ключ в том, что вы должны вводить значение точно так же, как контроллер, служба и т. Д. Вы можете установить .value для множества различных типов - строк, массивов объектов и т. Д. Например:
myvalues.js файл, содержащий значение - убедитесь, что он включен в ваш файл 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 - возможно, это файл спецификации Jasmine, загруженный 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); }); });
источник
Вам нужно указать
csrf
в своем контроллереIndexUsersCtrl = ( $scope, csrf )
IndexUsersCtrl.$inject = [ '$scope', 'csrf' ]
источник