2013-08-28 6 views
73

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

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

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

दूसरा दो स्थिरांक है जो मैं पूरा करने के लिए

उत्तर

44

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

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

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

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

तो, आप एक निरंतर एक है कि लगातार बी पर निर्भर करता है बनाना चाहते हैं, तो आप कोणीय बताने के लिए है कि एक बी पर निर्भर करता है लेकिन लगातार निर्भरता नहीं हो सकती की आवश्यकता होगी। निरंतर एक समारोह वापस कर सकते हैं, लेकिन 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/

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

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

3

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

असहज उदाहरण:

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

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

12

मैं इस तरह से है कि कार्य करें:

var constants = angular.module('constants', []); 

constants.factory("Independent", [function() { 
    return { 
     C1: 42 
    } 
}]); 

constants.factory('Constants', ["Independent", function(I) { 
    return { 
     ANSWER_TO_LIFE: I.C1 
    } 
}]); 
+0

@ बिटरबा। क्या आपक लिए इसे विस्तार से कहना संभव है? यह कोड कहां जाएगा? धन्यवाद। मार्क – mark1234

+0

@ mark1234 यह कोड कहीं भी जा सकता है जहां आप चाहते हैं। मैं इसे अपनी सेवाओं की फाइल पर रखना चाहता हूं। आपको अपने मुख्य मॉड्यूल पर 'स्थिरांक' मॉड्यूल शामिल करना याद रखना चाहिए। – Beterraba

143

यह करने के लिए एक आसान तरीका है इस तरह है:

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

और इस तरह स्थिरांक का उपयोग करें: जब तक आप की जरूरत नहीं है के रूप में link

+3

@ हेल्ज़गेट यह नहीं है कि @ gabn88 क्या कह रहा था। 'MyApp.constant' को पारित किया जा रहा कार्य एक तत्काल-आमंत्रित फ़ंक्शन अभिव्यक्ति या IIFE है। यह खुद को बुलाता है इसलिए आपको नहीं करना है! ऐसा लगता है: '(फ़ंक्शन (पैराम्स) {// do stuff})()'। फ़ंक्शन अभिव्यक्ति के आसपास कोष्ठक और अंत में अतिरिक्त सेट पर ध्यान दें। – daemonaka

+0

@ हेल्ज़गेट 'RESOURCES' नाम के साथ निरंतर एक फ़ंक्शन अभिव्यक्ति नहीं होगी, लेकिन * उस कार्य द्वारा * ऑब्जेक्ट लौटाया गया है। – daemonaka

+2

बेस्ट उत्तर उपलब्ध है। –

8

:

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

क्रेडिट्स प्रदाताओं में आपके निरंतर उपयोग तक, यह ठीक काम करना चाहिए:

.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) { 
}) 
+0

को तुरंत चालू करने में विफल यह उत्तर अधिक प्यार प्राप्त करना चाहिए :)। धन्यवाद;) –

2

@Linkmichiel द्वारा प्रदान समाधान अच्छा है, लेकिन आप सख्त अंदर एक निरंतर उपयोग करना चाहते हैं config चरण के बाद

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>

, सभी स्थिरांक सेटअप होगा corr: एक और, आप config ब्लॉक में उन्हें गठजोड़ कर सकते हैं ectly (स्निपेट आज़माएं)।

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

+1

पूरक के रूप में। आपको '(संसाधनों में प्रोप) के लिए घोषणा करना होगा {' var या let, जैसे '(संसाधनों में प्रोप) {'। – josivan

1

is there a way in Angularjs to define constants with other constants?

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

.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 
) 
संबंधित मुद्दे