Javascript AngularJS:从工厂返回配置

Javascript AngularJS:从工厂返回配置,javascript,angularjs,angularjs-factory,Javascript,Angularjs,Angularjs Factory,让我先说我是一个完全有棱角的新手 我正在尝试在Angular应用程序中设置一个伪常量,以便能够从$http.get()获取一些API配置详细信息。我读到这样做的正确方法是创建一个返回承诺()的工厂,然后将该工厂注入控制器 我相信我已经正确地完成了这项工作,但是仍然会出现以下错误(请注意,当我在控制器中删除对apiConfig的引用时,错误会消失): 这是我的密码: 工厂 app.factory('apiConfig', ['$http', 'API_KEY'], function ($http,

让我先说我是一个完全有棱角的新手

我正在尝试在Angular应用程序中设置一个伪常量,以便能够从
$http.get()
获取一些API配置详细信息。我读到这样做的正确方法是创建一个返回承诺()的工厂,然后将该工厂注入控制器

我相信我已经正确地完成了这项工作,但是仍然会出现以下错误(请注意,当我在控制器中删除对
apiConfig
的引用时,错误会消失):

这是我的密码:

工厂

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) {

    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.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);

}]);
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);

}]);
我也尝试过让工厂返回一个对象,但这也不起作用。以下是我为此尝试的代码:

工厂

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) {

    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.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);

}]);
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应用程序?我在控制台中看到的错误没有多大意义。

要进行调试,请使用。这是调试AngularJS应用程序的方法:)

以下是几点建议:

  • 仅当您希望进一步转换值时,才在$q上使用.then类型承诺
  • 在$http承诺上使用.failure和.success。两者具有相同的签名:(数据,httpStatus);您收到的错误可能是由于某些非客户端错误造成的(因此,您对api的访问可能会被拒绝)
首先检查这些,然后使用巴塔朗。
还有:你会遇到什么样的错误?AngularJS Stacktrace将您指向何处?

发现问题。这是一个放置不正确的方括号。最初我有:

工厂(损坏)

问题是我在传递实际的工厂函数之前过早地关闭了数组。第一行/第三行代码应如下所示:

工厂(固定)


我已经用这个错误和一些额外的细节更新了我原来的帖子。我安装了Batarang,但它没有提供任何有用的东西(显然旧版本比当前版本更有用)。