1

アプリにいくつかのサードパーティの Angular モジュールを含めたいと考えています。以前は、単に ng-app を使用してブートストラップし、コントローラー内にコードを配置する単純なアプリしか作成していませんでした。

私の理解では、htmlに次のようなものが必要です。

<html ng-app"myApp">

次に、私の JS は次のようになります。

angular.module('myApp',['thirdPartyModule1','thirdPartyModule2']);

var myCtrl = function($scope, myApp, $http){

    //my stuff
};

しかし、これを行うとエラーが発生します。

Error: Unknown provider: myAppProvider <- myApp 
4

1 に答える 1

9

myApp をコントローラーに挿入する必要はありません。コントローラーは次のように定義する必要があります。

angular.module('myApp',['thirdPartyModule1','thirdPartyModule2']);

var myCtrl = function($scope, $http){
 //my stuff
});

もう少し「標準」にするために:

var myApp = angular.module('myApp',['thirdPartyModule1','thirdPartyModule2']);

myApp.controller('myCtrl', function($scope, $http){
  //my stuff
});

このようにして、必要に応じてアプリへの参照を作成できます。

ミニファイヤ/ビューティファイア/クロージャ コンパイラと互換性を持たせるには:

var myApp = angular.module('myApp',['thirdPartyModule1','thirdPartyModule2']);

myApp.controller('myCtrl', ['$scope','$http', function($scope, $http){
  //my stuff
}]);

これにより、基本的にコントローラーの引数が配列になり、配列の最初のメンバーが注入するものになります。これは、ミニファイヤが引数を次のようなランダムな文字に変換し、function(a,b)Angular が何を注入したいのかわからないためです。配列に文字列を渡すことで、配列['$scope','$http', function(a,b)]の最初の 2 つの引数が角度に何を注入するかを指示するため、これは問題ありません。

于 2013-08-07T03:43:52.853 に答える