Angular.js: है .value () एप्लिकेशन को विस्तृत रूप से सेट करने के लिए उचित तरीका और इसे एक नियंत्रक में कैसे पुनः प्राप्त करें


87

नमस्ते वहाँ मैं angular.js वीडियो के एक जोड़े को देख रहा था और देखा कि मूल्य () विधि का उपयोग एक प्रकार का मॉड्यूल-चौड़ा स्थिर सेट करने के लिए किया गया था। उदाहरण के लिए, कोई इस तरह से कोणीय-यूआई लाइब्रेरी के कॉन्फ़िगरेशन को सेट कर सकता है: (कॉफ़ीस्क्रिप्ट)

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']

लेकिन मुझे लगता है कि ऐप मॉड्यूल के अनुरूप 'ऐप' वैरिएबल में टैप करके उस मान को प्राप्त नहीं किया जा सकता है।

मैं यहाँ ST पर पढ़ता हूँ और angularjs के Google समूह पर साझा करता हूँ कि कॉमन कोड btwn नियंत्रकों को साझा करने का एक तरीका एक सेवा के माध्यम से है, क्या यह अवधारणा यहाँ भी लागू होगी?

धन्यवाद!


3
यदि आप जागरूक नहीं हैं, तो $ http सेवा में कुछ CSRF क्षमताएं हैं। अनुभाग देखें "क्रॉस साइट रिक्वेस्ट फॉरगेरी (XSRF) प्रोटेक्शन" यहां: docs.angularjs.org/api/ng.$http
मार्क राजकोक

जवाबों:


147

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
    });

4
'myService' टोकन तस्वीर में कैसे फिट होता है?
डेव एडेलहार्ट

1
@DaveEdelhart, क्षमा करें, मैंने आपका प्रश्न पहले नहीं देखा था। मैंने अभी इसका उपयोग उस सेवा के एक उदाहरण के रूप में किया है जो मूल्य का उपयोग करता है। सौभाग्य से, Pavel Hlobil एक अच्छा सामरी है और उसने उस कोड को स्पष्ट करने के लिए मेरे कोड में कुछ एनोटेशन जोड़ा है।
बेन लेश

2
नहीं, यह "केवल पढ़ने के लिए" नहीं है। यदि आप किसी वस्तु को वहाँ रखना चाहते हैं, तो कुछ भी उस वस्तु के गुणों को बदल सकता है। यह ज्यादातर इसलिए है क्योंकि यह जावास्क्रिप्ट है, न कि एंगुलर के हिस्से पर किसी विशेष डिजाइन चिंता के कारण। हालाँकि, मैंने इस तरह से उपयोग किए जाने वाले मूल्य को नहीं देखा है कि इसे बदल दिया जा रहा है, आमतौर पर मैंने इसे इंजेक्शन योग्य "स्थिरांक" के लिए उपयोग किया है।
बेन लेश

2
हालांकि स्थिरांक अपरिवर्तनीय नहीं हैं। आप सिर्फ उन्हें एक और इंजेक्शन के साथ अधिलेखित नहीं कर सकते क्योंकि $ प्रदान उन्हें सजावट के लिए अवरोधन नहीं करेगी।
बेन लेश

2
मुझे पता है कि यह एक पुराना उत्तर है, लेकिन "मॉड्यूल। मूल्य (कुंजी, मूल्य) का उपयोग संपादन योग्य मूल्य को इंजेक्ट करने के लिए किया जाता है, मॉड्यूल (मान, कुंजी) का उपयोग निरंतर मूल्य को इंजेक्ट करने के लिए किया जाता है" इसमें एनजी के साथ मिलान नहीं होता है नवीनतम अवतार (1.3.4)। मॉड्यूल.वल्यू () और मॉड्यूल.कॉन्स्टेंट () के बीच का अंतर यह है कि: आपके ऐप के जीवनचक्र (कॉन्फ़िगरेशन और चलाने के दौरान) में एक स्थिर () पहले उपलब्ध है; मूल्य () केवल चलाने के दौरान उपलब्ध है। क्या वे परिवर्तनशील हैं, और जहां बदले हुए मूल्य दिखाई देते हैं, उनके मूल्य की संरचना (आदिम या नहीं) पर निर्भर करता है। docs.angularjs.org/guide/providers#constant-recipe
lukkea

4

मैं हाल ही में एक परीक्षण के अंदर कर्म के साथ इस सुविधा का उपयोग करना चाहता था। जैसा कि डैन ड्योन बताते हैं कि आप एक नियंत्रक, सेवा, आदि की तरह एक मान इंजेक्ट करेंगे। आप कई अलग-अलग प्रकारों के लिए .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'}
]);                                                                                                                                                                                                                         

]);

परीक्षण / कल्पना / mytest.js - शायद यह कर्मा द्वारा लोड की गई एक जैस्मीन कल्पना फ़ाइल है

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);
    });
});

2

आपको csrfअपने नियंत्रक में संदर्भ देने की आवश्यकता हैIndexUsersCtrl = ( $scope, csrf )

IndexUsersCtrl.$inject = [ '$scope', 'csrf' ]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.