88

こんにちは、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とangularjsのグーグルグループで、共通コードbtwnコントローラーを共有する1つの方法はサービスを介することであると読みましたが、この概念はここでも適用されますか?

ありがとう!

4

3 に答える 3

149

Module.value(key, value)編集可能な値を注入するために Module.constant(key, value)使用され、定数値を注入するために使用されます

この2つの違いは、「定数を編集できない」ということではなく、$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
    });
于 2012-10-22T16:33:33.537 に答える
4

私は最近、テスト内でKarmaでこの機能を使用したいと思いました。Dan Doyonが指摘しているように、重要なのは、コントローラーやサービスなどと同じように値を挿入することです。.valueは、文字列、オブジェクトの配列など、さまざまなタイプに設定できます。次に例を示します。

myvalues.js値を含むファイル-カルマ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-おそらくこれはKarmaによってロードされたJasmineスペックファイルです

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);
    });
});
于 2013-05-18T15:10:58.453 に答える
2

csrfコントローラで参照する必要がありますIndexUsersCtrl = ( $scope, csrf )

IndexUsersCtrl.$inject = [ '$scope', 'csrf' ]
于 2012-10-22T16:27:50.013 に答える