$ RootScope को नहीं मिल सकता है


162

निम्न फ़ाइल "काम करती है" (यह समझ कि यह कोई त्रुटि नहीं फेंकती है):

<!doctype html>
<html ng-app="modx">
    <script src="http://code.angularjs.org/angular-1.0.0rc7.js"></script> 
    <script>
        angular.module("modx", [], function($routeProvider) {
        });
    </script>
</html>

लेकिन यह

<!doctype html>
<html ng-app="modx">
    <script src="http://code.angularjs.org/angular-1.0.0rc7.js"></script>
    <script>
        angular.module("modx", [], function($routeProvider, $rootScope) {
        });
    </script>
</html>

त्रुटि देता है:

त्रुटि: अज्ञात प्रदाता: modx से $ rootScope
सोर्स फाइल: http://code.angularjs.org/angular-1.0.0rc7.js
लाइन: 2491

WTF?


114
नीचे पंक्ति के रूप में डब्ल्यूटीएफ के लिए +1।
एलिरन मलका

जवाबों:


307

आप कॉन्फ़िगरेशन चरण के दौरान उदाहरण के लिए नहीं पूछ सकते हैं - आप केवल प्रदाताओं के लिए पूछ सकते हैं।

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

// configure stuff
app.config(function($routeProvider, $locationProvider) {
  // you can inject any provider here
});

// run blocks
app.run(function($rootScope) {
  // you can inject any instance here
});

अधिक जानकारी के लिए http://docs.angularjs.org/guide/module देखें ।


9
धन्यवाद, यह सही समझ में आता है, लेकिन आपको यह कैसे पता चला? क्या यह डॉक्स में था?
मालवियो

143
@ मावोलियो नहीं, वह 3 कोर डेवलपर्स में से एक है।
क्रिसऑडनी

8
खैर, एफडब्ल्यूआईडब्ल्यू, यह "मॉड्यूल लोडिंग एंड डिपेंडेंसी" सेक्शन के तहत अब डॉक्स में है।
मार्क राजकॉक

1
@vojta लेकिन क्या होगा अगर मुझे बाहर से पैरामीटर पास करने और इसमें उपयोग करने की आवश्यकता है config? asp.net अनुप्रयोग के भीतर रूट पथ? मैं अभी वैश्विक वैरिएबल का उपयोग नहीं करना चाहता हूं ng-init='root:<%= myroot %>'और इसमें rootमूल्य का उपयोग और उपयोग करना चाहता हूं module.config
1913

7
@vittore मुझे लगता है, इस "बाहरी" कॉन्फ़िगरेशन को वैश्विक विंडो में डालना ठीक है। या एक ऐसा मॉड्यूल होना जो इस सारे सामान को परिभाषित करता है और फिर आप इसे अपने ऐप में लोड करते हैं - जैसे। angular.module('config', []).constant('appRoot', '/local/js/app');(यह कोड आपके सर्वर द्वारा जेनरेट किया जाएगा (आप इसे जेएस फाइल के रूप में भी जेनरेट कर सकते हैं, बल्कि तब html फाइल में appRoot
इनलाइन

7

मैंने निम्नलिखित "पैटर्न" को बहुत उपयोगी पाया है:

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];
function MainCtrl (scope, rootscope, location, thesocket, ...) {

जहां, MainCtrl एक नियंत्रक है। मुझे डर है कि मैं नाम बदल दूं और चीजों को बदल दूं, उदाहरण के लिए एक-से-एक नकल करने वाले कंट्रोलर फंक्शन के पैरामीटर नामों पर भरोसा करने में असहज हूं। मैं इस उद्देश्य के लिए $ इंजेक्शन का स्पष्ट रूप से उपयोग करना पसंद करता हूं।


काफी अच्छा है; लेकिन आप इस MainCtrlतरह से कैसे पहुंच सकते हैं?
f1lt3r

मुझे पता है कि आपकी टिप्पणी पुरानी है, लेकिन यह भविष्य के लिए सवालों के जवाब देने के लायक है। मॉड्यूल / नियंत्रकों को इस तरह परिभाषित किया जा सकता है ताकि आप उन्हें इस तरह से एक्सेस कर सकें:angular.module('myMod', []).controller('theController', controllerFunction); controllerFunction.$inject = []; function controllerFunction() { }
मटमैट

1

मैंने आपको सुझाव नहीं दिया कि आप जैसे वाक्य रचना का उपयोग करते हैं। AngularJS आप विभिन्न कार्यक्षमताओं के लिए के रूप में आप चाहते हैं देता है ( run, config, service, factory, आदि ..), जो कर रहे हैं और अधिक professional.In इस समारोह तुम भी इंजेक्षन की जरूरत नहीं है कि खुद की तरह

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];

आप इसका उपयोग कर सकते हैं, जैसा कि आप जानते हैं।

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