2014-10-21 19 views
26

मैं एक प्रदाता से $window एक्सेस करना चाहते हैं (mymodule.provider(...)) लेकिन मैं config समय में इस तरह के निर्भरता की जरूरत है (इसलिए यह कोई फायदा नहीं मुझे $get में इस तरह निर्भरता डाल करने के लिए है)।

वर्तमान में मैं $window का उपयोग नहीं है, और कारण मैं config समय में इस तरह के निर्भरता की जरूरत है क्योंकि मैं $window.STATIC_URL तक पहुँचने के लिए है, जो खिड़की में एक स्थिर है की जरूरत है, और मैं इसका इस्तेमाल राज्यों के टेम्पलेट्स कॉन्फ़िगर करने के लिए ($stateProvider)।

वर्तमान कोड है:

mymodule.provider('StaticUrl', function() { 
    this.url = function() { return window.STATIC_URL || 'static'; }; 
    this.$get = this.url; 
}); 

इसका कारण यह है मैं दोनों config में इस तरह के मूल्य की जरूरत है और समय चलाने (मैं के लिए इसका इस्तेमाल करते हैं सिर्फ राज्यों की स्थापना, की तुलना में अधिक है, इसलिए जब मैं एक नियंत्रक में इस तरह के यूआरएल की जरूरत है , मैं इसे निर्भरता के रूप में आयात करता हूं)।

//config 
mymodule.config(['StaticUrlProvider', '$stateProvider', function(sup, $sp){ 
    //... 
    $sp.state('main', { 
     templateUrl: sup.url() + 'path/to/template.html' 
    }); 
    //... 
}]); 
//run-time (in this case: a controller) 
mymodule.controller('MyController', ['$scope', 'StaticUrl', function($s, su) { 
    var buildingType = /*a complex expression here*/; 
    $s.buildingPicture = $su + 'path/to/building/pics/' + buildingType + '.png'; 
}]); 

मौजूदा डेटासेट को देखते हुए, मेरे पास STATIC_URL के अंतर्गत स्थित प्रत्येक प्रविष्टि के लिए एक तस्वीर है, जो प्रदान की जानी चाहिए। तो इसका मतलब है कि मैं दोनों चरणों में इस तरह के निरंतर उपयोग करते हैं।

मैं इसे अधिक कोणीय तरीके से कैसे करूं (यानी ग्लोबल्स में भरोसा किए बिना)? क्या moduleerr उठाए बिना प्रदाता से $window तक पहुंचने का कोई तरीका है?

+2

इंजेक्शन लगाने $ windowProvider कोशिश – harishr

उत्तर

50

इंजेक्षन $windowProvider और फोन $windowProvider.$get()

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