2015-12-10 2 views
1

Я определил фабрику, которая делает запрос на получение, но когда я ввожу его в контроллер, он всегда выдает неопределенную ошибку.AngularJS - Я не понимаю, почему фабрика всегда не определена

Это фабрика:

(function() { 
    'use strict'; 

    var app = angular 
     .module('myApp'); 

    app.factory('homeFactory', homeFactory); 

    function homeFactory ($q, $http, $location) { 
     var data = {}; 

     data.getProducts = getProducts; 

     function getProducts() { 
      return $http.get('http://localhost:8000/api/v1/products') 
       .error(errorMessage); 
     } 

     function errorMessage(response) { 
      console.log('There was an error', response); 
     } 

     return data; 
    } 

})(); 

Это контроллер:

(function() { 
    'use strict'; 

    var app = angular 
     .module('myApp'); 

    app.controller('homeController', homeController); 

    homeController.$inject =[homeFactory]; 

    function homeController(homeFactory) { 
     var home = this; 
     homeFactory.getProducts() 
      .success(success); 

     function success(jsonData, statusCode) { 
      console.log('The request was successful', statusCode); 
      console.dir(jsonData); 
      home.products = jsonData; 
     } 
    } 
})(); 

Это, кажется, хорошо, но консоль бросает:

Uncaught ReferenceError: homeFactory is not defined 
+3

Если ошибка возникает в вашем контроллере, вы должны, вероятно, показать этот код (и фактическое ** сообщение об ошибке в полном объеме **). Используйте неинфицированную версию 'angular.js' для более подробных сообщений об ошибках – Phil

ответ

-1

В контроллере положи завод в dependecies

app.controller('homeController', ['homeFactory', '$scope', 
    function (homeFactory, $scope){ 
     //scope code goes here 
    }] 
); 
+1

плакат использует' $ inject', а не массивные инъекции. Кроме того, нет необходимости вводить '$ scope', если вы его не используете. – Claies

1

Функция контроллер поддерживает инъекции зависимостей. Вам не нужно напрямую использовать форсунку $. Попробуйте это:

var app = angular 
    .module('myApp'); 

app.controller('homeController', homeController); 


function homeController(homeFactory) { 
    var home = this; 
    homeFactory.getProducts() 
     .success(success); 

    function success(jsonData, statusCode) { 
     console.log('The request was successful', statusCode); 
     console.dir(jsonData); 
     home.products = jsonData; 
    } 
} 

Угловая исполняющая найти службу homeFactory, и автоматически передать его в функции контроллера при вызове.

+1

, в то время как это может работать в разработке, если эти скрипты будут сокращены для производства, это сломается. использование '$ inject' на самом деле рекомендуется избегать проблем с минимизацией. Однако, как предложил другой ответ, '$ inject' требует строку, в которой проблема лежит. – Claies

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