繁体   English   中英

Http状态码工厂AngularJs

[英]Http Status Code Factory AngularJs

我是使用AngularJs的新手,我使用$ http get创建了一个简单的工厂,它获取了一个.json,该JSON具有一堆或http状态代码号作为键,以及它们各自的消息作为值。 我出于某种原因会得到此错误:

无法读取未定义的属性“ get”

json:

{
    "200": "Ok",
    "201": "Created",
    "202": "Accepted",
    "404": "Not_Found",
    "400": "Bad Request",
    "403": "Forbidden",
    "417": "Expectation Failed"
}

factory.js

  .factory('statusCodesFactory', function () {

                var httpStatusCodes = {
                    getStatus: function ($http) {
                        $http.get('catalog/statusCodes.json')
                            .then(function (response) {
                               httpStatusCodes.code = response;
                            });
                    }
                }
                return httpStatusCodes;
            })

您需要正确传递“ $ http”的依赖项。

.factory('statusCodesFactory', ['$http', function ($http) {
    var httpStatusCodes = {
        getStatus: function () {
            $http.get('catalog/statusCodes.json')
                .then(function (response) {
                    httpStatusCodes.code = response;
                });
            }
        }
        return httpStatusCodes;
    });

话虽如此,您的函数并没有真正返回任何东西。 更好的格式是这样的:

.factory('statusCodesFactory', ['$http', function ($http) {
    var httpStatusCodes = {
        getStatus: function () {
            return $http.get('catalog/statusCodes.json')
                .then(function (response) {
                    return response;
                });
            }
        }
        return httpStatusCodes;
    });

这样称呼:

var statusCodes = {};
statusCodesFactory.getStatus().then(function(response){
    statusCodes = response;
});

将$ http服务注入您的工厂。

.factory('statusCodesFactory', ['$http', function ($http) {
    return {
        getStatus: function () {
           $http.get('catalog/statusCodes.json')
                .success(function (response) {
                    // 
                });
            }
        }
    };
}]);

调用功能为-

statusCodesFactory.getStatus();

如果需要将响应返回给控制器,请使用Promises。 注入$ q服务-

.factory('statusCodesFactory', ['$http', '$q', function ($http, $q) {
    return {
        getStatus: function () {
           var defer = $q.defer();
           $http.get('catalog/statusCodes.json')
                .success(function (response) {
                    defer.resolve(response);
                });
            }
           return defer.promise;
        }
    };
}]);

然后从控制器调用工厂方法为-

statusCodesFactory.getStatus().then(function(response){
    // Use response
});

错误是因为您无法调用$http上的get方法,因为$httpundefined 传递给getStatus: function($http)...$http参数getStatus: function($http)...是此问题的根源。 您需要找出传递给该函数的内容,以及为什么是空对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM