Angular.js: .value () - правильный способ установить постоянную всего приложения и узнать, как ее получить в контроллере

Привет! Я смотрел пару видео 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 - через службу. Будет ли эта концепция применяться и здесь?

Спасибо!

86 голосов | спросил Nik So 22 +04002012-10-22T20:18:18+04:00312012bEurope/MoscowMon, 22 Oct 2012 20:18:18 +0400 2012, 20:18:18

3 ответа


0

Module.value(key, value) используется для ввода редактируемого значения, Module.constant(key, value) используется для ввода постоянного значения

Разница между ними не столько в том, что вы «не можете редактировать константу», но и в том, что вы не можете перехватить константу с помощью $ обеспечить и вставить что-то еще.

 // 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
    });
ответил Ben Lesh 22 +04002012-10-22T20:33:33+04:00312012bEurope/MoscowMon, 22 Oct 2012 20:33:33 +0400 2012, 20:33:33
0

Недавно я хотел использовать эту функцию с Кармой в тесте. Как отмечает Дэн Дойон, ключом является то, что вы вводите значение точно так же, как контроллер, сервис и т. Д. Вы можете установить .value для многих различных типов - строк, массивов объектов и т. Д. Например:

myvalues.js - файл, содержащий значение - убедитесь, что оно включено в ваш файл конфигурации karma

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);
    });
});
ответил SnapShot 18 Maypm13 2013, 19:10:58
0

Вам нужно сослаться на csrf в вашем контроллере IndexUsersCtrl = ( $scope, csrf )

IndexUsersCtrl.$inject = [ '$scope', 'csrf' ]
ответил Dan Doyon 22 +04002012-10-22T20:27:50+04:00312012bEurope/MoscowMon, 22 Oct 2012 20:27:50 +0400 2012, 20:27:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132