2014-10-09 29 views
5

Inizio con AngularJS e sto riscontrando alcuni problemi durante il tentativo di utilizzare una factory da un controller.AngularJS - Factory - TypeError: Impossibile leggere la proprietà 'getSpec' di undefined

Ho la seguente fabbrica

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

e poi cerco di consumare dal controller come segue

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); 
    }); 

    }]); 

ma quando provo a farlo funzionare ricevo il seguente messaggio di

TypeError: Cannot read property 'getSpec' of undefined 

Non so cosa mi manca, dovrebbe essere un errore newbbie, l'ho cercato su google e ho provato m qualsiasi esempio con lo stesso risultato.

Qualche idea su cosa sto facendo male?

Grazie!

risposta

11

Sembra che non si stia utilizzando correttamente la notazione dell'array di dipendenze. Si prega di fare riferimento al codice sottostante. Aggiungi "factoryService" & "$scope" come elementi dell'array.

.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); 
    }); 

}]); 

Documentazione angolare su dependancy injection.

+0

Grazie !!! Aiuta davvero !!! – federom

3

Prima di tutto, non hai dichiarato correttamente il tuo controller. Esso dovrebbe essere simile a questo:

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

Io personalmente uso Service s come li trovo più leggibile.

Ecco cosa la vostra fabbrica sarà simile come Service:

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

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

}); 

Questo potrebbe funzionare con il regolatore di corrente.

+0

Grazie !!! Aiuta davvero !!! – federom

Problemi correlati