2014-08-29 2 views
1

Я хотел бы помочь в выяснении, почему эта служба, которую я создал, возвращается неопределенно, когда я печатаю ее на консоли.Почему эта фабрика возвращается не определена?

module.js

'use strict'; 
var Search = angular.module('SearchApp',["ngCookies","ngRoute"]); 

Search.run(function ($http, $cookies) { 
    $http.defaults.headers.common['X-CSRFToken'] = $cookies['csrftoken']; 
}); 

Search.config(function($routeProvider){ 
    $routeProvider 
     .when('/', { 
      controller:'searchCtrl', 
      resolve: { 
       dota_items: function (InventoryService){ 
        return InventoryService.get('dota'); 
       } 
      } 
     }) 
     .otherwise({ 
      redirectTo: '/' 
     }) 
}); 

Это модуль, файл, в котором я объявлен маршрут.

servcie.js

Search.factory('InventoryService', function ($http, $q) { 
    var api_url = "/api/inventory/"; 
    return { 
     get: function (inventory) { 
      var inv_url = api_url + inventory + '/'; 
      var defer = $q.defer(); 
      $http({method: 'GET', url: inv_url}). 
       success(function (data, status, headers, config){ 
        defer.resolve(data); 
       }) 
       .error(function (data,status, headers, config){ 
        defer.reject(status); 
       }); 
      return defer.promise; 
     } 
    } 
}); 

Насколько я могу сказать, что синтаксис является правильным для моей службы, однако я, возможно, что-то пропустил.

controller.js

Search.controller('searchCtrl',['$scope', function($scope, dota_items){ 

    console.log(dota_items); 
    $scope.selected = 'have'; 

    $scope.setSection = function(section){ 
     $scope.selected = section; 
    }; 

    $scope.isSelected = function(section){ 
     return $scope.selected == section; 
    }; 

}]); 

Вот вопрос, в консоли, переменная всегда не определено. Я попытался проверить, действительно ли моя служба вызывается путем печати на консоль, однако ничего не регистрируется. Я не уверен, в чем проблема.

Благодаря

ответ

1

При объявлении 'searchCtrl' контроллер с inlined array dependency injection синтаксисом

['$scope', function($scope, dota_items) { }] 

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

Search.controller('searchCtrl', ['$scope','dota_items',function($scope, dota_items) { 
    // your code 
}]); 

Вы также можете удалить массив целиком и использовать неявные зависимости угловых оснащены следующим образом:

Search.controller('searchCtrl', function($scope, dota_items) { 
    // your code 
}); 

, но следует отметить, что этот подход работает только если вы не Минимизация или обфускации вашего кода.

+0

Привет, я пробовал оба решения, размещенные выше, и теперь я получаю эту ошибку. http://errors.angularjs.org/1.2.0/$injector/unpr?p0=dota_itemsProvider%20%3C-%20dota_items. Это была начальная ошибка, которую я получал, прежде чем я сделал изменение, которое я сделал, чтобы получить неопределенный результат. Я не уверен, в чем проблема, насколько я могу сказать, в том, что мне нужно. – Deep

+0

Я не знаю ни того, ни другого, если у вас в вашей разметке нет директивы 'ng-controller', которая прямо ссылается на' 'searchCtrl'' (потому что, когда у меня была эта проблема, это была моя ошибка) ... если не так, думаю, просто обновите свой вопрос, и я удалю этот ответ. – Dan

+0

hmmm, только что проверил мой html-файл, и я только один раз обращался к ng-контроллеру, а также к приложению. У меня уже был вопрос, связанный с этой проблемой, поэтому я не изменю это, так как это, вероятно, будет полезно для кого-то нового, подобного мне самому. Спасибо – Deep

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