2016-05-12 7 views
1

Ich habe Probleme beim Versuch, meine Factory/Service-Funktion von meinem Controller aus zu aktivieren. Ich habe viele Threads dazu gesehen und habe verschiedene Lösungen ausprobiert, aber es bringt mich dazu zu glauben, dass ich etwas Einfaches vermisse. Hier ist der Code (Fehlermeldung versehen unten):AngularJS Factory.XXX ist keine Funktion

'use strict'; 

    var smacApp = angular.module('smacApp', ['ngRoute']); 

    smacApp.config(function($routeProvider) { 
     $routeProvider 
      .when("/login", { 
       templateUrl: "templates/login.html", 
       controller: "LoginController" 
      }) 
    }); 

    smacApp.factory('AuthenticationService', function() { 

     var users = ["Bob", "Joe"]; 

     return { 
      all: function() { 
       return users; 
      }, 
      first: function() { 
       return users[0]; 
      } 
     }; 
    }); 


    smacApp.controller('LoginController', function($scope,   AuthenticationService) { 
     $scope.users = AuthenticationService.all(); 
     console.log($scope.users); 
    }); 

    smacApp.run.$inject = ['$rootScope', '$routeParams']; 
    smacApp.run(function($rootScope, $routeParams) { 

    }); 

Die Fehlermeldung Ich erhalte ist:

angular.js:9778TypeError: AuthenticationService.all is not a function 
     at new <anonymous> (http://localhost/smac3/app.js:61:39) 
     at d (http://localhost/smac3/lib/angular/js/angular.min.js:34:265) 
     at Object.instantiate   (http://localhost/smac3/lib/angular/js/angular.min.js:34:394) 
     at http://localhost/smac3/lib/angular/js/angular.min.js:66:112 
     at link (http://localhost/smac3/lib/angular/js/angular-  route.js:913:26) 
     at J (http://localhost/smac3/lib/angular/js/angular.min.js:53:345) 
     at f (http://localhost/smac3/lib/angular/js/angular.min.js:46:399) 
     at http://localhost/smac3/lib/angular/js/angular.min.js:46:67 
     at http://localhost/smac3/lib/angular/js/angular.min.js:47:303 
     at u (http://localhost/smac3/lib/angular/js/angular.min.js:51:28)   <div ng-view="" id="container" class="ng-scope"> 

Jede Hilfe ist sehr zu schätzen!

+0

manchmal passiert es, wenn Sie eine Variable und eine Funktion haben, mit der selbe Name. wie Variable 'all' und eine Funktion 'all'. Nun, ich sehe nicht alle in Ihrem Code verfügbar, aber ich habe nur eine Möglichkeit gesagt. AuthenticationService.first() funktioniert? –

+0

Danke Sumeet! Leider keine Freude ... TypeError: AuthenticationService.first ist keine Funktion –

+0

es ist seltsam, weil ich die exakt gleiche Syntax verwenden und ich sehe keinen Fehler lol: p denke –

Antwort

1

Vielleicht ist die Syntax für die Fabrik ist richtig, aber ich habe sie immer mehr geschrieben wie folgt aus:

smacApp.factory('AuthenticationService', function() { 

    var factory = this 
    factory.users = ["Bob", "Joe"]; 
    factory.all = function() { 
     return factory.users; 
    }; 
    factory.first = function() { 
     return factory.users[0] 
    } 

    return factory; 
} 

oder

smacApp.factory('AuthenticationService', function() { 

    var factory = this 

    factory = { 
     users: ["Bob", "Joe"], 
     all: function() { return factory.users }, 
     first: function() { return factory.users[0] } 
    } 
    return factory; 
} 
+0

Danke Mike! Ich habe versucht, beide Methoden zu verwenden, und bekomme den gleichen Fehler für jeden von ihnen. Gibt es eine Möglichkeit, dass meine Injektion oder das Routing den Bereich durcheinander bringt? Ich bin Angular ziemlich neu, also verzeih mir, wenn das doof klingt. –

+0

Ich sehe keine Probleme mit dem Umfang oder Ihrer Injektion. Überprüfen Sie, ob Rechtschreibung und Groß-/Kleinschreibung in allen Fällen identisch sind. Ich weiß, dass das offensichtlich scheint, aber ich habe stundenlang darüber nachgedacht, dass das bei anderen Themen nicht der Fall war. Versuchen Sie auch, nur aus Spaß von einer Fabrik zu einem Service zu wechseln. Obwohl es keinen Unterschied machen sollte. Wenn du es immer noch nicht bekommst, poste einen Codepen und lass uns einen Blick darauf werfen. –

+1

Vielen Dank für die Hilfe! Ich habe herausgefunden, was das Problem war ... Bei der Fehlerbehebung habe ich meine Controller- und Servicelogik in meine app.js verschoben, jedoch habe ich meine xxxConroler.js- und xxxService.js-Dateien wie in der Datei index.html

Verwandte Themen