###前提・実現したいこと
angular.jsを使い始めたのですが、どうしてもわからないことがあり、質問させて頂きます。根本的な個所を理解できていないのが原因かと思いますが...
###発生している問題・エラーメッセージ
アプリ内で利用するserviceの登録についてなのですが、外部でクラスとして定義したものをserviceメソッドで登録して利用しようとしているのですが、実行すると下記エラーがchromeコンソールに表示されます。
このエラーの回避方法を教えてください。
angular.js:13236 Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- DataStore
###該当のソースコード
スクリプトファイルの読み込みとしてはangular.jsファイル、angular-resource.jsファイル、 main.jsの順に読み込んでいます。
main.js
javascript
1class DataStore { 2 constructor($scope, $timeout, $resource, $window) { 3 this.$scope = $scope; 4 this.$resource = $resource(url); 5 this.store = null; 6 this.message = null; 7 8 this.$scope.$watch('service.store', this.saved, true); 9 10 DataStore.$inject = ['$scope', '$timeout', '$resource', '$window']; 11 } 12 init() {...} 13 saved() {...} 14} 15 16var app = angular('MyApp', ['ngResource']); 17app.service('DataStore', DataStore); 18app.controller('myCtrl', function(DataStore) { 19 this.service = DataStore; 20}
###試したこと
serviceでインスタンスを返す時に、constructorに引数がわたっていないのかと思い、
javascript
1app.factory('DataStore', ($scope, $timeout, $resource, $window) => { 2 return new DataStore($scope, $timeout, $resource, $window); 3}
と変えてみたのですが、同じくエラー。
追記
こんな感じで試してみました。
main.js
javascript
1class DataStore { 2 constructor($timeout, $resource, $window) { 3 this.$resource = $resource(url); 4 this.store = null; 5 this.message = null; 6 7 DataStore.$inject = ['$timeout', '$resource', '$window']; 8 } 9 init() {...} 10 saved() {...} 11} 12 13var app = angular('MyApp', ['ngResource']); 14app.service('DataStore', DataStore); 15app.controller('myCtrl', function(DataStore) { 16 this.service = DataStore; 17}
$scopeをconstructorから外したところ、コードは問題なく動作しました。
...serviceを登録する際に、$scopeは利用できないんでしょうか。$timeout等のangular.jsから提供されているサービスという認識でしたので渡せるとおもったのですが。
クラスを外部で定義して$watch等を組み込みたい場合は、どうすれば?
初心者ですみません。
どなたかご説明お願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
angular.jsのバージョンは1.5です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。