2012-05-07 9 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> 

はエラーになります

WTF?

+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

@Mavolioいいえ、彼は3人のコア開発者の一人です。 – ChrisOdney

+8

さて、FWIWは、ドキュメントの "Module Loading&Dependencies"セクションにあります。 –

6

私は非常に有用であることが、次の "パターン" を見つけた:

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

MainCtrlはコントローラであり、。コントローラ関数のパラメータ名に依存して、インスタンスの1対1の模倣を行うことは、私が名前を変更して物事を変える恐れがあることに嫌なことです。私はこの目的のために$ injectを明示的に使用するほうがずっと好みです。

+0

これはきちんとしていますが、そのような 'MainCtrl'にどうやってアクセスしますか? – f1lt3r

+0

あなたのコメントは古いですが、将来のために質問に答える価値があります。これにより、次のようにアクセスできます: 'angular.module( 'myMod'、[])。コントローラ( 'theController'、controllerFunction); controllerFunction。$ inject = []; function controllerFunction(){ } ' – Mutmatt

0

I のように構文を使用することをおすすめしません。 AngularJsあなたは(runconfigservicefactory、等。)したいと異なる機能を持つことができ、この機能よりprofessional.Inであるあなたも

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...]; 
のように自分でそれを注入する必要はありませんあなたが知っているように、それを使用することができます

関連する問題