क्या Angularjs में अन्य स्थिरांक के साथ स्थिरांक परिभाषित करने का कोई तरीका है?




angularjs-module (6)

नियंत्रक, सेवाओं और दूसरों के बीच निर्भरताओं को परिभाषित करने के कोणीय तरीके निर्भरता इंजेक्शन (डीआई) द्वारा है। तो यदि आपके पास एक नियंत्रक ए है जो सेवा बी पर निर्भर करता है तो आपको इसे इस तरह बनाना होगा।

var myApp = angular.module("exampleApp",[]);

myApp.controller("aCtrl", function(serviceB){
    //Controller functionally here
});

देखें, कोणीय सेवा बी निर्भरता की जांच करेगा और उस नाम के साथ बनाई गई सेवा की तलाश करेगा। यदि आप एक नहीं बनाते हैं तो आपको एक त्रुटि मिल जाएगी।

इसलिए, यदि आप निरंतर बी बनाना चाहते हैं जो निरंतर बी पर निर्भर करता है, तो आपको कोणीय को बताना होगा कि ए बी पर निर्भर करता है लेकिन निरंतर निर्भरता नहीं हो सकती है। निरंतर एक समारोह वापस कर सकते हैं, लेकिन DI निरंतर के लिए काम नहीं करेगा। इस पहेली को जांचें ताकि आप देख सकें कि कौन सी विधियां DI काम करती हैं: http://jsfiddle.net/RMj5s/1/

तो अपने प्रश्न का उत्तर दें, आप अन्य स्थिरांक के साथ निरंतर परिभाषित नहीं कर सकते हैं।

लेकिन आप यह कर सकते हैं:

angular.module('projectApp', [])
  .constant('domain','http://somedomain.com')
  .constant('api','/some/api/info')
  .service('urls',function(domain,api){ this.apiUrl = domain+api;})

  .controller('mainCtrl',function($scope,urls) {

      $scope.url = urls.apiUrl;

  });

यह काम करने के लिए इस पहेली को जांचें: http://jsfiddle.net/kJ3tT/1/

यदि आप DI के बारे में और अधिक समझना चाहते हैं, तो इस पोस्ट को देखें: http://merrickchristensen.com/articles/javascript-dependency-injection.html

मुझे उम्मीद है कि यह आपके प्रश्न का उत्तर दे सकता है।

मैं अन्य स्थिरांक के साथ स्थिरांक को परिभाषित करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि यह नहीं किया जा सकता है, क्योंकि शुरुआती स्थिरता तैयार नहीं होती है जब आवश्यक निरंतर आवश्यकता होती है। मैं यह सुनिश्चित करना चाहता हूं कि यह संभव नहीं है।

वर्तमान में मेरे पास इस तरह स्थिरांक हैं:

angular.module('mainApp.config', [])
    .constant('RESOURCE_USERS_DOMAIN', 'http://127.0.0.1:8008')
    .constant('RESOURCE_USERS_API', 'http://127.0.0.1:8008/users')
    // Specific routes for API
    .constant('API_BASIC_INFORMATION', RESOURCE_USERS_API + '/api/info')
    .constant('API_SOCIAL_NETWORKS', RESOURCE_USERS_API + '/api/social')
    ;

दूसरा दो स्थिरांक वह है जो मैं पूरा करना चाहता हूं


@Linkmichiel द्वारा प्रदान किया गया समाधान अच्छा है, लेकिन यदि आप एक दूसरे के अंदर एक स्थिरता का उपयोग करना चाहते हैं, तो आप उन्हें कॉन्फ़िगर ब्लॉक में जोड़ सकते हैं:

angular.module("exampleApp", [])

.constant('BASE_URL', 'http://127.0.0.1:8008')

.constant('RESOURCES', {
  USERS_DOMAIN: '',
  USERS_API: '/users',
  BASIC_INFO: '/api/info'
})

.config(function(BASE_URL, RESOURCES) {
  for (prop in RESOURCES) {
    RESOURCES[prop] = BASE_URL + RESOURCES[prop];
  }
})

.controller('WhatIsInResourcesController', function($scope, RESOURCES) {
  $scope.RESOURCES = RESOURCES;
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="exampleApp">
  <div ng-controller="WhatIsInResourcesController">
    <pre>{{ RESOURCES | json }}</pre>
  </div>
</div>

कॉन्फ़िगरेशन चरण के बाद, सभी स्थिरांक सही ढंग से सेटअप किए जाएंगे (स्निपेट को आज़माएं)।

कहानी का नैतिक है: कोणीय इतना अच्छा है कि आप स्थिरांक भी बदल सकते हैं।


क्या Angularjs में अन्य स्थिरांक के साथ स्थिरांक परिभाषित करने का कोई तरीका है?

Premise मैं प्रत्येक .constant घोषणा में स्टोर एकल स्थिरता से नफरत है, आमतौर पर मैं सभी constants एक एकल घोषणा में स्टोर करने के लिए निम्नलिखित वाक्यविन्यास का उपयोग करें:

.constant("SampleConst", {
    Types: {
       "A": "toggle",       
       "B": "run",
       "C": "close",
    },
    "MenuItems": [
        {
            code: 100,
            type: "toggle"       //Here I'd like use Types defined before
        },
        {
            code: 200,
            type: "toggle"       //Here I'd like use Types defined before
        },
    }],
    "Nationalities": ["I", "E", "S"],
    "OtherCost": "TEST",
})

यह स्थिरता स्टोर करने और दूसरों के अंदर समान स्थिरता का उपयोग करने का मेरा समाधान है

.constant("SampleConst", function () {

    var _types = {
          TOGGLE: "toggle",       
          RUN: "run",
          CLOSE: "close",
    };



    var constants = {
       Types: _types ,
       MenuItems: [
           {
               code: 100,
               type: _types.TOGGLE       //NOW USING CONSTANT
           },
           {
               code: "200",
               type: _types.RUN          //NOW USING CONSTANT
           }
        ],
        Nationalities: ["I", "E", "S"],
        OtherCost: "TEST"
    };
    return constants;

    }()         // <----- Be careful to place double () at the end 
)

जब तक आपको प्रदाताओं में अपने निरंतर उपयोग की आवश्यकता नहीं है, तब तक यह ठीक काम करना चाहिए:

.constant('HOST', 'localhost')
.factory('URL', function(HOST) { return "http://" + HOST })

यदि आपको प्रदाताओं में स्थिरांक तक पहुंच की आवश्यकता है, तो मुझे लगता है कि आपको कुछ और काम करना है:

.constants('HOST', 'localhost')
.provider('DOMAIN', function(HOST) {
    var domain = "http://" + HOST;
    this.value = function() { return domain };
    this.$get = this.value;
 })
 .provider("anyOtherProvider", function(DOMAINPovider) {
     var domain = DOMAINProvider.value();
 };
 .factory("anyOtherService", function(DOMAIN) {
 })

ऐसा करने का एक आसान तरीका इस तरह है:

var myApp = angular.module("exampleApp",[]);

myApp.constant('RESOURCES', (function() {
  // Define your variable
  var resource = 'http://127.0.0.1:8008';
  // Use the variable in your constants
  return {
    USERS_DOMAIN: resource,
    USERS_API: resource + '/users',
    BASIC_INFO: resource + '/api/info'
  }
})());

और इस तरह के स्थिरांक का उपयोग करें:

myApp.controller("ExampleCtrl", function(RESOURCES){
  $scope.domain = RESOURCES.USERS_DOMAIN;
});

क्रेडिट: link


निश्चित रूप से यह नहीं बता सकता कि क्या (आईएम) संभव है। लेकिन एक आधारभूत आधार बेस स्थिरांक को नियमित स्थिरांक के रूप में परिभाषित करना होगा, और उच्च-आदेश वाले को बंद करने का उपयोग करके सेवाओं के रूप में सुनिश्चित करना होगा कि उन्हें बदला नहीं जा सकता है।

असहज उदाहरण:

angular.module('myApp').constant('BASE_CONSTS',{
    'FIRST_CONST': '10',
    'SECOND_CONST': '20'
});

angular.module('myServices').factory('MyServiceName', ['BASE_CONSTS', function ('BASE_CONSTS') {
    var SECOND_ORDER_CONST = BASE_CONSTS.FIRST_CONST * 100;
    return {
        GET_SECOND_ORDER_CONST: function() {
            return SECOND_ORDER_CONST;
        }
    }
}]);

और सेवा इंजेक्शन के बाद इसका इस्तेमाल करें:

MyServiceName.GET_SECOND_ORDER_CONST();

बहुत सुंदर नहीं है, लेकिन काम पूरा करना चाहिए।





angularjs-module