2012-05-07 7 views
156

निम्न फ़ाइल "काम करता है" तक नहीं पहुंच सकता (भावना है कि यह किसी भी त्रुटि फेंक नहीं है):

Error: Unknown provider: $rootScope from modx
Source File: http://code.angularjs.org/angular-1.0.0rc7.js
Line: 2491

:

<!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> 

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

डब्ल्यूटीएफ?

+107

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

उत्तर

296

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

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

धन्यवाद, यह सही समझ में आता है, लेकिन आप उसे कैसे जानते थे? क्या यह दस्तावेज़ों में था? – Malvolio

+140

@ मावोलीओ नो, वह एक 3 कोर डेवलपर्स है। – ChrisOdney

+8

ठीक है, एफडब्ल्यूआईडब्ल्यू, यह अब "मॉड्यूल लोडिंग और निर्भरता" अनुभाग के तहत दस्तावेज़ों में है। –

6

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

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

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

+0

कि साफ है,?। लेकिन आप उसे कैसे की तरह MainCtrl' का उपयोग करते हैं ' – f1lt3r

+0

मैं जानता हूँ कि अपनी टिप्पणी पुराना है, लेकिन यह भविष्य की खातिर मॉड्यूल के लिए सवालों का जवाब देने के लायक है/नियंत्रकों परिभाषित किया जा सकता इस तरह आप उन्हें इस तरह से एक्सेस कर सकते हैं: 'angular.module ('myMod', [])।नियंत्रक ('नियंत्रक', नियंत्रक समारोह); नियंत्रक समारोह। $ इंजेक्ट = []; फ़ंक्शन नियंत्रक फ़ंक्शन() { } ' – Mutmatt

0

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

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

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