[英]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
方法,因为$http
是undefined
。 传递给getStatus: function($http)...
的$http
参数getStatus: function($http)...
是此问题的根源。 您需要找出传递给该函数的内容,以及为什么是空对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.