2014-10-09 19 views
5

Zaczynam od AngularJS i mam pewne problemy podczas próby użycia fabryki z kontrolera.AngularJS - Factory - TypeError: Nie można odczytać właściwości 'getSpec' z undefined

Mam następujący fabryka

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

a następnie staram się spożywać go z kontrolerem następująco

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

    }]); 

Ale gdy próbuję go i pojawia się następujący komunikat uruchomić

TypeError: Cannot read property 'getSpec' of undefined 

Nie wiem, czego mi brakuje, to powinien być błąd newbbie, googlowałem i próbowałem m dowolne przykłady z takim samym wynikiem.

Jakieś pomysły na to, co robię źle?

Dzięki!

Odpowiedz

11

Wygląda na to, że nie używasz prawidłowo zapisu w tablicy zależności. Proszę zapoznać się z poniższym kodem. Dodaj "factoryService '&' $scope 'jako elementy tablicy.

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

}]); 

kątowa dokumentowania zgrzewów na dependancy injection.

+0

Dzięki! To naprawdę pomaga !!! – federom

3

Po pierwsze, nie zadeklarowano poprawnie swojego kontrolera. Powinno to wyglądać tak:

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

Osobiście korzystam Service s znajdę im bardziej czytelny.

Oto, co twoja fabryka będzie wyglądać jak Service:

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

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

}); 

to będzie działać z aktualnym sterownikiem.

+0

Dzięki! To naprawdę pomaga !!! – federom

Powiązane problemy