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?

4

3 に答える 3

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を参照してください。

于 2012-05-07T21:50:47.693 に答える
7

次の「パターン」が非常に役立つことがわかりました。

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

ここで、MainCtrlはコントローラーです。私は、名前を変更して物事を台無しにするかもしれないことを恐れて、インスタンスの1対1の模倣を行うController関数のパラメーター名に依存することに不快感を覚えています。私はこの目的のために$injectを明示的に使用することを非常に好みます。

于 2013-05-08T20:51:42.377 に答える
1

私はあなたがしたように構文を使うことを勧めません。AngularJsを使用すると、必要に応じてさまざまな機能(、、、、などrun)を使用できconfig、よりプロフェッショナルになります。この関数では、次のように自分でそれを注入する必要もありません。servicefactory

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

ご存知のように、それを使用することができます。

于 2016-04-27T21:32:04.983 に答える