Позвольте мне начать с того, что я полный новичок в Angular.
Я пытаюсь установить псевдоконстанту в своем приложении 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? Ошибки, которые я вижу в консоли, на самом деле не имеют особого смысла.