2016-09-23 16 views
0

私は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(//...メソッドのコードがコントローラの定義の最後に付けるので、コードがわかります。しかし、アプリケーション全体でファクトリを利用できるようにしたい。これは可能ですか?

+0

あなたは注入配列で 'leaflet'と定義しましたが、実際のパラメータでは' dog'と定義しました。私は彼らが働くことに合っている必要があると信じています。 – Lex

+0

@Lex彼らは一致する必要はありません。唯一の制限は、文字列内の名前が、 – gmustudent

+0

@Lexから来るモジュールのサービスの実際の名前と一致しなければならないということです。これはポスト・エラーです。私はそれを修正する必要があります。より広く適用可能にしようとしています。 – Thomas

答えて

0

最初の問題は、モジュールの後に配列が必要なことです。 モジュールの依存関係がなくても。だから.module('dogSelection', [])ではない.module('dogSelection') - 次の問題は、注入する前に犬の使用を定義する必要があることです。 dobがどこから来るかを定義するモジュールがなければ、あなたの見たようなエラーが発生します。この

モジュールのようなもの:

angular.module('dogModule', []) 

.factory('dog', function($window) 
{ 

}); 

コントローラー:

angular.module('dogSelection', [ 
    'dogModule' 
]) 

.controller('dogSelectionController', ['$scope', 'dog', function ($scope, dog) 
{ 

}]); 
+0

モジュールは他の場所。ここで '[]'をインクルードするとモジュールが上書きされます。もう一度、定義はOPごとに(別名、簡潔さのために除外され、 'index.html'を取らずに)起こります。 – Thomas

+0

@Thomas申し訳ありませんがあなたの投稿を少し速く読んで、私を介して小冊子を読んでください。私は今何を得ているのだろうと思っているかもしれないと思う。 – gmustudent

+0

問題はない。今すぐ作業してください。私はあらゆる種類のファンキーなエラーを受けています。私は自分が「間違っている」ことを知らない。ああ – Thomas

0

'dogSelectionController'インジェクタが['$scope', 'leaflet'から['$scope', 'dog'に変更する必要がありますように見えます。犬の工場の名前は'leaflet'ではありません。

更新:共有工場の回避策として

直接メインアプリケーションモジュールに工場を有することです。 私は今では携帯電話に乗っているので、現時点ではより良い答えを出すことができません。

+0

質問が更新されました。ありがとう。 – Thomas

関連する問題