2015-01-28 5 views
0

Позвольте мне начать с того, что я полный новичок в углу.AngularJS: Возврат конфигурации с фабрики

Я пытаюсь установить псевдопостоянство в своем приложении Angular, чтобы иметь возможность получить некоторые детали конфигурации API от $http.get(). Я читал, что правильный способ сделать это - создать фабрику, которая возвращает обещание (source), а затем ввести эту фабрику в контроллер (ы).

Я считаю, что я сделал это правильно, но я все еще получаю следующее сообщение об ошибке (обратите внимание, что при удалении ссылки на apiConfig в контроллере, ошибки исчезают):

Error: [ng:areq] http://errors.angularjs.org/1.3.10/ng/areq?p0=fn&p1=not%20aNaNunction%2C%20got%string 
    at Error (native) 
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:6:417 
    at Qb (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:19:417) 
    at sb (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:20:1) 
    at Vb (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:34:283) 
    at Object.e [as invoke] (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:36:439) 
    at Object.$get (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:35:71) 
    at Object.e [as invoke] (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:37:96) 
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:38:410 
    at d (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:36:308) 

Вот мой код:

завод

app.factory('apiConfig', ['$http', 'API_KEY'], function ($http, API_KEY) { 
    return $http.get('http://api.themoviedb.org/3/configuration?api_key=' + API_KEY); 
}); 

контроллер

appControllers.controller("MovieDetailCtrl", ['$scope', '$routeParams', '$http', 'API_KEY', 'apiConfig', function ($scope, $routeParams, $http, api_key, apiConfig) { 
    "use strict"; 

    apiConfig.then(function (response) { 
     $scope.apiConfig = response.data; 
    }); 

    var setMovieObject = function (response) { 
     $scope.movie = response.data; 
    }; 

    $http.get('http://api.themoviedb.org/3/movie/' + $routeParams.movieId + '?api_key=' + api_key).then(setMovieObject); 

}]); 

Я также попытался имея завод возвращает объект, но это тоже не работает. Вот код, который я пытался за что:

завод

app.factory('apiConfig', ['$http', 'API_KEY'], function ($http, API_KEY) { 

    var theConfig = {}; 

    theConfig.getConfig = function() { 
     return $http.get('http://api.themoviedb.org/3/configuration?api_key=' + API_KEY); 
    }; 

    return theConfig; 
}); 

Контроллер

appControllers.controller("MovieDetailCtrl", ['$scope', '$routeParams', '$http', 'API_KEY', 'apiConfig', function ($scope, $routeParams, $http, api_key, apiConfig) { 
    "use strict"; 

    apiConfig.getConfig().then(function (response) { 
     $scope.apiConfig = response.data; 
    }); 

    var setMovieObject = function (response) { 
     $scope.movie = response.data; 
    }; 

    $http.get('http://api.themoviedb.org/3/movie/' + $routeParams.movieId + '?api_key=' + api_key).then(setMovieObject); 

}]); 

Кроме того, как следить, есть ли ресурсы на чтение AngularJS трассировки стека? Или есть лучший способ отладки приложений AngularJS? Ошибки, которые я вижу в консоли, на самом деле не имеют большого смысла.

ответ

0

Обнаружена проблема. Это была неправильно размещенная квадратная скобка. Изначально у меня был:

завод (сломанный)

app.factory('apiConfig', ['$http', 'API_KEY'], function ($http, API_KEY) { 
    return $http.get('http://api.themoviedb.org/3/configuration?api_key=' + API_KEY; 
}); 

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

завода (фиксированный)

app.factory('apiConfig', ['$http', 'API_KEY', function ($http, API_KEY) { 
    return $http.get('http://api.themoviedb.org/3/configuration?api_key=' + API_KEY; 
}]); 
0

Для отладки, пожалуйста, используйте Batarang. Это путь для отладки приложений AngularJS :)

Вот несколько советов:

  • Используйте .then на $ Q типа Обещания только тогда, когда вы хотите, чтобы в дальнейшем преобразовать значение.
  • Используйте .failure и .success на $ http-Promises. Оба имеют одну и ту же подпись: (data, httpStatus); Возможно, ошибка, которую вы получаете, связана с некоторой ошибкой, которая может не быть клиентской (ваш доступ к api может быть отклонен, если на то пошло).

Проверьте это первым и используйте Batarang. Также: Какие ошибки вы получаете? Куда стоит уклонение от AngularJS Stacktrace?

+0

Я обновил мой оригинальный пост с ошибкой и некоторыми дополнительными деталями. Я установил Batarang, но он не дает ничего полезного (более старая версия была более полезной, чем эта текущая версия). – jkinz

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