2015-03-02 2 views
0

Не могу понять, почему мой завод для связи с REST API не работает. я получаю следующие ошибки:TypeError: Не удается прочитать свойство 'protocol' undefined

TypeError: Cannot read property 'protocol' of undefined 

и

TypeError: Cannot read property 'message' of undefined 

todo.controller.js

'use strict'; 
angular 
    .module('app') 
    .controller('TodoController', ['$scope', 'todoFactory', function ($scope, todoFactory) { 

     getTodos(); 

     function getTodos() { 
      todoFactory.all() 
       .success(function (todos) { 
        $scope.todos = todos; 
       }) 
       .error(function (error) { 
        $scope.status = 'Unable to load todo data: ' + error.message; 
       }); 
     } 

    }]); 

todo.factory.js

'use strict'; 
angular.module('app') 
    .constant('API_URI', 'http://localhost:8080/api/todo') 
    .factory('todoFactory', ['$http', function($http, API_URI) { 

     var todoFactory = {}; 

     function getUrl() { 
      return API_URI; 
     } 

     function getUrlForId(itemId) { 
      return getUrl + itemId; 
     } 

     todoFactory.all = function() { 
      return $http.get(getUrl()); 
     }; 

     todoFactory.fetch = function (id) { 
      return $http.get(getUrlForId(id)); 
     }; 

     todoFactory.add = function (todo) { 
      return $http.post(getUrl(), todo); 
     }; 

     todoFactory.update = function (todo) { 
      return $http.put(getUrlForId(id), todo) 
     }; 

     todoFactory.delete = function (id) { 
      return $http.delete(getUrlForId(id)); 
     }; 

     return todoFactory; 
    }]); 

Однако, если я буду ссылаться на простой $ http.get (что-то) в контроллере, который работает:

$http.get('http://localhost:8080/api/todo'). 
     success(function(data) { 
      $scope.todos = data; 
     }); 

Что я делаю не так с моим использованием фабрики по сравнению с простой прямой $ http.get() в контроллер?

ответ

1

С помощью этого синтаксиса (для поддержки минификация):

.factory('todoFactory', ['$http', function($http, API_URI) { 

Вам нужно добавить 'API_URI' как строку, а (рядом '$http')

.factory('todoFactory', ['$http', 'API_URI', function($http, API_URI) { 

В противном случае, отмечая впрыскивается в для API_URI параметр.

+0

О, черт возьми, на самом деле мой плохой. Thanx =) – user1376885