2014-07-18 17 views
30

क्या AngularJS के साथ एक और स्थिरता में निरंतर इंजेक्ट करना संभव है?कोणीयजेएस स्थिरांक

उदा।

var app = angular.module('myApp'); 

app.constant('foo', { message: "Hello" }); 

app.constant('bar', ['foo', function(foo) { 
    return { 
     message: foo.message + ' World!' 
    } 
}]); 

मुझे कोणीय स्थिरता के उपयोग की आवश्यकता है क्योंकि मुझे इसे कॉन्फ़िगर रूटीन में इंजेक्ट करने की आवश्यकता है। यानी

app.config(['bar', function(bar) { 
    console.log(bar.message); 
}]); 

मुझे पता है कि आप केवल config दिनचर्या में स्थिरांक और प्रदाताओं इंजेक्षन कर सकते हैं और मैं समझता हूँ कि आप प्रदाताओं में निर्भरता इंजेक्शन कर सकते हैं, हालांकि, यह इस तरह की लिए सबसे अच्छा तरीका हो सकता है प्रतीत नहीं होता है परिदृश्य ...

आपकी मदद के लिए अग्रिम धन्यवाद!

+0

तो अपने स्वयं के उत्तर के आधार पर काम करना संभव है:) प्रश्न यह है कि आप ऐसा क्यों करेंगे? वास्तविक दुनिया मूल्य कहां है, क्यों न केवल सेवा को परिभाषित करें जो एकाधिक स्थिरांक पर निर्भर करता है? – GnrlBzik

+0

कारण मैं यह कर रहा हूं अनुमति स्तर को परिभाषित करना है ... मेरे पास उपयोगकर्ता भूमिका स्तर और उपयोगकर्ता पहुंच स्तर (पहुंच स्तर भूमिकाओं पर निर्भर करता है) को परिभाषित करने वाले स्थिरांक हैं और फिर यह कॉन्फ़िगर रूटीन में इंजेक्शन दिया जाता है। – miklz

उत्तर

30

आप सही हैं, दोनों फू और बार को स्थिरांक के रूप में पंजीकृत करना असंभव है।

इसके अलावा एक समाधान के रूप एक प्रदाता प्रयोग करने के लिए, आप लगभग यह सही छोड़कर आप एक प्रदाता उदाहरण में डाटा स्टोर करने के लिए है कि मिल गया:

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

app.constant('foo', { 
    message: 'Hello' 
}); 

app.provider('bar', ['foo', function(foo) { 
    this.data = { 
    message: foo.message + ' World!' 
    }; 

    this.$get = function() { 
    return this.data; 
    }; 
}]); 

और फिर config ब्लॉक में, एक बार के प्रदाता उदाहरण इंजेक्षन (नहीं एक बार उदाहरण के रूप में यह अभी तक कॉन्फ़िगर चरण में उपलब्ध नहीं है):

app.config(['barProvider', function(barProvider) { 
    console.log(barProvider.data.message); 
}]); 

आशा है कि इससे मदद मिलती है।

2

ऐसा लगता है कि यह दूसरी बार एक प्रदाता बनाने के लिए सबसे अच्छा तरीका है। यानी

var app = angular.module('myApp'); 

app.constant('foo', { message: "Hello" }); 

app.provider('bar', ['foo', function(foo) { 
    this.$get = function() { 
     return { 
      message: foo.message + ' World!' 
     }; 
    } 
}]); 

और उसके बाद:

app.config(['bar', function(bar) { 
    console.log(bar.message); 
}]); 
+2

बार एक सेवा उदाहरण है जिसे कॉन्फ़िगर चरण में इंजेक्शन नहीं दिया जा सकता है। – runTarm

+0

आपके स्पष्टीकरण के लिए धन्यवाद! यह बहुत उपयोगी था! – miklz

0

जहां तक ​​प्रलेखन जाता है: / Developer Guide/Providers

ऐसा लगता है कि यह निर्भरता वाक्य रचना का समर्थन नहीं करता है, यह सिर्फ कुंजी मान जोड़ी है, जहां मूल्य एक हो सकता है वस्तु।

-3


निरंतर बनाने और उपयोग करने का सरल तरीका यहां दिया गया है।

var app=angular.module("#app_name#",[]);

//lets defint constant

app.constant("constantService",{attr:"this is first contant"});

app.controller("#controller_name#",function($scope,constantService){

console.log(constantService);
console.log(constantService.attr);

})
ब्राउज़र क्रोम में खोलें और परिणाम को ब्राउज़र के कंसोल में देखें।
आपको धन्यवाद।

2

एक अन्य दृष्टिकोण Immediately-invoked function expression का उपयोग किसी फ़ंक्शन को परिभाषित करने और तुरंत इसे आमंत्रित करने के लिए करना है। इस तरह, अभिव्यक्ति फ़ंक्शन के मान का मूल्यांकन करती है और लौटाती है, जिसमें दो स्थिरांक शामिल हो सकते हैं।

यह इस करने के लिए कुछ इसी तरह का उपयोग कर प्राप्त है: जैसे स्थिरांक का उपयोग

app.constant("foo", (function() { 
    var message = 'Hello' 
    return { 
     foo: message, 
     bar: message + " World!" 
    } 
})()); 

और उसके बाद:

console.log("foo: " + foo.foo); 
console.log("bar: " + foo.bar); 
0

आप किसी अन्य निरंतर में एक निरंतर इंजेक्षन नहीं कर सकते। कोणीय उस अनुमति नहीं देता है।लेकिन आप इसे

angular.module('myApp', []) 
.constant('firstName','John') 
.constant('lastName','Smith) 
.service('name',function(firstName,lastName) 
{ 
    this.fullName = firstName+' '+lastName; 
}) 
.controller('mainCtrl',function($scope,name) { 

    $scope.name = name.fullName; 

}); 
इसके अलावा ऐड-ऑन के लिए

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

संबंधित मुद्दे