2014-10-09 9 views
5

Ich beginne mit AngularJS und ich habe einige Probleme, wenn ich versuche, eine Fabrik von einem Controller zu verwenden.AngularJS - Factory - TypeError: Kann Eigenschaft 'getSpec' von undefined nicht lesen

Ich habe folgendes Werk

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

und dann versuche ich es von der Steuerung zu verbrauchen wie folgt

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

    }]); 

Aber wenn ich versuche, es ich folgende Meldung

erhalten zu laufen
TypeError: Cannot read property 'getSpec' of undefined 

Ich weiß nicht, was ich vermisse, Es sollte ein newbbie Fehler sein, ich googelte es und ich versuchte m irgendwelche Beispiele mit dem gleichen Ergebnis.

Irgendwelche Ideen, was ich falsch mache?

Danke!

Antwort

11

Sieht so aus, als ob Sie die Abhängigkeitsarraynotation nicht richtig verwenden. Bitte beachten Sie den folgenden Code. Bitte fügen Sie 'factoryService' & '$scope' als Array-Elemente hinzu.

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

}]); 

Winkeldokumentation auf dependancy injection.

+0

Danke !!! Es hilft wirklich !!! – federom

3

Zunächst haben Sie Ihren Controller nicht ordnungsgemäß deklariert. Es sollte wie folgt aussehen:

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

Ich persönlich Service s verwenden, wie ich sie besser lesbar zu finden.

Hier ist, was Ihre Fabrik aussehen würde wie ein Service:

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

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

}); 

Dieses mit Ihrem aktuellen Controller funktionieren würde.

+0

Danke !!! Es hilft wirklich !!! – federom

Verwandte Themen