web-dev-qa-db-ja.com

AngularJS-ファクトリー-TypeError:未定義のプロパティ 'getSpec'を読み取れません

AngularJSから始めていますが、コントローラーからファクトリを使用しようとすると問題が発生します。

私は次の工場を持っています

angular.module('testingApp')
  .factory('factoryService', function ($http) {
    // Service logic
    var getSpec = function(p) {
      return $http.get('http://someurl//?p=' + p);
    };
    return {
      getSpec: getSpec  
    };
  });

それから私は次のようにコントローラーからそれを消費しようとします

angular.module('testingApp')
  .controller('ServiceincientsCtrl',[ function (factoryService,$scope) {
   console.log('Starting Service Incident Controller');
    factoryService.getSpec('AAA').then(function(response){
        $scope.result = response.data;
    }, function(error){
        console.log('opsssss' + error);
    });

  }]);

しかし、実行しようとすると、次のメッセージが表示されます

TypeError: Cannot read property 'getSpec' of undefined

私は何が欠けているのかわかりません、それは初心者のエラーであるはずです、私はそれをグーグルで検索しました、そして私は同じ結果で多くの例を試しました。

私が間違っていることについてのアイデアはありますか?

ありがとう!

5
federom

依存関係配列表記を適切に使用していないようです。以下のコードを参照してください。配列項目として「factoryService」と「$scope」を追加してください。

.controller('ServiceincientsCtrl', ['factoryService', '$scope', function(factoryService, $scope) {
    console.log('Starting Service Incident Controller');
    factoryService.getSpec('AAA').then(function(response) {
        $scope.result = response.data;
    }, function(error) {
        console.log('opsssss' + error);
    });

}]);

依存性注入 に関するAngularドキュメント。

11
Mahesh Sapkal

まず、コントローラーを適切に宣言していません。次のようになります。

.controller('ServiceincientsCtrl',['$scope', 'factoryService', function($scope, factoryService) {

Servicesは読みやすいので、個人的に使用しています。

工場はServiceとして次のようになります。

myApp.service('factoryService', function ($http) {

    this.getSpec = function(p) {
        return $http.get('http://someurl//?p=' + p);
    }

});

これは、現在のコントローラーで機能します。

3
Patrick Reck