私はAngularで開発している簡単なアプリケーションがあります。私は可能な限り以下を簡略化しました。私はglobally available library injectible(特に何も特別なもの)を作成しないようにしようとしています:私のapp.module.js
ファイルは単にとして定義されてモジュール間通信、角度J、ファクトリ
:
angular.module('dogApplication', [
'dogModule',
'dogSelection'
]);
次のようにindex.html
ファイルが(読みやすくするために全焼)に定義されます。
<html lang="en" ng-app="dogApplication">
<head>
<!-- ... -->
<script src="app/app.module.js"></script>
<script src="app/dogs/dog.module.js"</script>
<script src="app/dogs/dog.factory.js"</script>
<script src="app/dogSelection.module.js"></script>
<!-- controllers then imported -->
</head>
<body>
<!-- content -->
</body>
</html>
.module
ファイルは、各追加のコンポーネント、コントローラ、ファクトリなどが添付されるモジュールを定義し、app.module.js
が「メイン」モジュールの添付ファイルです。次のように
dog.factory.js
が定義されています:
angular
.module('dogModule')
.factory('dog', function($window) {
// do logic defined by James Hill in linked article
return friendly;
});
私は、コントローラいる:
:アプリケーションにアクセスすると、私はかなり解決できない安っぽくエラーメッセージをangular
.module('dogSelection')
.controller('dogSelectionController', ['$scope', 'dog', function ($scope, dog) {
if (dog)
{
console.log('it worked');
}
}])
を取得します
angular.js:13920 Error: [$injector:unpr] Unknown provider: dogProvider <- dog <- dogSelectionController
http://errors.angularjs.org/1.5.8/$injector/unpr?p0=dogProvider%20%3C-%20dog%20%3C-%20dogSelectionController
at angular.js:68
at angular.js:4511
at Object.getService [as get] (angular.js:4664)
at angular.js:4516
at getService (angular.js:4664)
at injectionArgs (angular.js:4688)
at Object.invoke (angular.js:4710)
at $controllerInit (angular.js:10354)
at nodeLinkFn (angular.js:9263)
at angular.js:9673
上記の設定方法では、なぜdog
サービスにDI経由で利用可能なはありませんか?
.factory(//...
メソッドのコードがコントローラの定義の最後に付けるので、コードがわかります。しかし、アプリケーション全体でファクトリを利用できるようにしたい。これは可能ですか?
あなたは注入配列で 'leaflet'と定義しましたが、実際のパラメータでは' dog'と定義しました。私は彼らが働くことに合っている必要があると信じています。 – Lex
@Lex彼らは一致する必要はありません。唯一の制限は、文字列内の名前が、 – gmustudent
@Lexから来るモジュールのサービスの実際の名前と一致しなければならないということです。これはポスト・エラーです。私はそれを修正する必要があります。より広く適用可能にしようとしています。 – Thomas