2016-05-12 4 views
1

У меня есть проблемы с попыткой заставить мою фабричную/сервисную функцию работать с моего контроллера. Я видел много потоков на этом и пробовал различные решения, но это не помогло, поэтому мне кажется, что я пропустил что-то простое. Вот (сообщение об ошибке, указанных ниже) Код: сообщениеAngularJS Factory.XXX не является функцией

'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) { 

    }); 

Ошибка я получаю это:

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"> 

Любая помощь очень ценится!

+0

иногда это происходит, когда у вас есть переменная и функция с одно и то же имя. как переменная «все» и функция «все». хорошо, я не вижу в вашем коде никакого vaiable, но я просто сказал, что это возможно. Выполняется аутентификацияService.first()? –

+0

Спасибо Sumeet! К сожалению, нет радости ... TypeError: AuthenticationService.first не является функцией –

+0

его странно, потому что я использую тот же синтаксис, и я не вижу ошибки lol: p am thinking –

ответ

1

Может быть, синтаксис для вашего завода является правильным, но я всегда писал их больше, как это:

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

или

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

Спасибо, Майк! Я попытался использовать оба метода, и я получаю одну и ту же ошибку для каждого из них. Есть ли возможность моей инъекции или маршрутизации испортить масштаб? Я довольно новичок в Angular, так что простите меня, если это звучит глупо. –

+0

Я не вижу никаких проблем с объемом или вашей инъекцией. Дважды проверьте, что орфография и случай одинаковы во всех случаях. Я знаю, что это кажется очевидным, но я часами думал, что это не так по другим вопросам. Кроме того, просто для удовольствия, попробуйте перейти с завода на сервис. Хотя это не должно иметь значения. Если вы все еще не можете его получить, опубликуйте код и давайте посмотрим. –

+1

Большое спасибо за помощь! Я выяснил, в чем проблема ... В поиске и устранении неисправностей я переместил мой контроллер и логику обслуживания в свой app.js, однако я все же включил файлы xxxConroler.js и xxxService.js, поскольку

Смежные вопросы