2016-09-15 4 views
2

Я делаю небольшое угловое приложение, чтобы показать информацию о английской премьер-лиге. Я хочу сделать услугу для обработки http-звонков, потому что я делаю это несколько раз на странице, и я не хочу повторять все. Вот мой table.js TableController, который используется для создания таблицы лиги/Угловое приложение http call custom service failing

(function(){ 

angular 
.module("eplApp") 
.controller("tableCtrl", TableController); 

TableController.inject = ['httpService']; 

function TableController(service){ 
    var apiUrl = "http://api.football-data.org/v1/soccerseasons/426/leagueTable"; 

    service.getListFromUrl(apiUrl).then(function(data){ 
var vm.this; 
vm.data = response.data; 
}); 
} 
})(); 

А вот сервис я сделал для запуска запросов HTTP, service.js:

(function(){ 

angular 
.module("eplApp") 
.factory("httpService", httpService); 

httpService.inject = ['$http']; 

function httpService($http){ 
var apiKey = '971acba677654cdb919a7ccebd5621e2'; 
var vm = this; 
vm.data = []; 

$http({ 
    headers: { 'X-Auth-Token': apiKey }, 
    method: "GET", 
    url: apiUrl 
}).then(function(response) { 
    vm.data = response.data; 
    return vm.data; 
}); 
} 
})(); 

Когда я запускаю его, я получаю следующую ошибку:

Error: [$injector:unpr] http://errors.angularjs.org/1.5.8/$injector/unpr?p0=serviceProvider%20%3C-%20service%20%3C-%20tableCtrl 

Где я иду не так?

+1

Я думаю, что вам следует начать с ввода вашей службы по имени («httpService»), а не по имени ее функции (HttpService) –

+0

Спасибо @ e-shfiyut. Я внес изменения, которые вы предложили, но ошибка остается. Я изменил код выше, чтобы отразить изменения. –

+1

вы должны прочитать о том, как создать фабрику/услугу в угловом формате. фабрика должна возвращать объект, это не просто указатель на функцию. посмотрите на ответ @ Tan-Le –

ответ

2

Try с изменением вашего сервис так:

(function(){ 

    angular 
    .module("eplApp") 
    .factory("httpService", httpService); 

    httpService.$inject = ['$http']; 

    function httpService($http){ 
    return { 
     getListFromURL : getListFromURL 
    } 

    function getListFromURL(apiUrl){ 
     var apiKey = '971acba677654cdb919a7ccebd5621e2'; 
     var vm = this; 
     vm.data = []; 

     return $http({ 
     headers: { 'X-Auth-Token': apiKey }, 
     method: "GET", 
     url: apiUrl 
     }).then(function(response) { 
     vm.data = response.data; 
     return vm.data; 
     }); 
    } 
})(); 

И вызовите функцию в контроллере, как это:

TableController.$inject = ['httpService']; 

function TableController(service){ 
    var apiUrl = "http://api.footballdata.org/v1/soccerseasons/426/leagueTable"; 

    service.getListFromURL(apiUrl).then(function(data){ 
    //data here is vm.data 
    }); 
} 

Надеется, что это поможет!

+1

Просто небольшой комментарий о соглашениях (для парня, который тоже спросил об этом), имя фабрики должно быть camelCase: 'httpService', а не' HttpService'. –

+0

Спасибо за ваш ответ @TanLe, однако я все равно получаю ту же ошибку, в другом месте на этот раз. Я обновил свой вопрос, чтобы отразить код, как вы сказали, и ошибку, которую я получил от него. –

+1

Попробуйте изменить 'inject' на' $ injection'. Похоже на то, что в этом случае «httpService» не может быть введен в контроллер и сделать ошибку. –

2

Проверьте контроллер, который вы использовали, функция-контроллер - это httpService, и вы использовали внутри HttpService. Пожалуйста, объясните, что он чувствителен к делу.

+0

Вы абсолютно правы, спасибо, что указали это. Однако я все еще получаю ту же ошибку. Я изменил код выше, чтобы отразить изменения. –