[英]Angular $http calls
我对javascript领域特别是Angular非常陌生。 我有一个关于$ http调用joomla服务器的问题,该服务器使用K2的"format=json"
URL扩展名具有非常基础的REST服务。 K2 joomla json输出的工作方式是,您只需在网址末尾附加"format=json"
: https://examplesite.com/category-1?format=json
: https://examplesite.com/category-1?format=json
"format=json"
现在可以正常工作,但我不禁要想一想如果我想要一个页面来显示类别1的文章,而另一个页面要显示类别2的文章,然后又有100个类别,那么我每次都要进行单独的$ http调用:
angular.module('TNA.servicesEastc', [])
.factory('Eastc', function ($http) {
var eastc = [];
storageKey = "eastc";
function _getCache() {
var cache = localStorage.getItem(storageKey );
if (cache)
eastc = angular.fromJson(cache);
}
return {
all: function () {
return $http.get("http://examplesite.com/category-1.html?format=json").then(function (response) {
eastc = response.data.items;
console.log(response.data.items);
return eastc;
});
},
getNew: function () {
return $http.get("http://examplesite.com/category-1.html?format=json").then(function (response) {
eastc = response.data.items;
return eastc;
});
},
get: function (eastCId) {
if (!eastc.length)
_getCache();
for (var i = 0; i < eastc.length; i++) {
if (parseInt(eastc[i].id) === parseInt(eastCId)) {
return eastc[i];
}
}
return null;
}
}
});
还有一个
angular.module('TNA.servicesWestc', [])
.factory('Westc', function ($http) {
var westc = [];
storageKey = "westc";
function _getCache() {
var cache = localStorage.getItem(storageKey );
if (cache)
westc = angular.fromJson(cache);
}
return {
all: function () {
return $http.get("http://examplesite.com/category-2.html?format=json").then(function (response) {
westc = response.data.items;
console.log(response.data.items);
return westc;
});
},
getNew: function () {
return $http.get("http://examplesite.com/category-2.html?format=json").then(function (response) {
westc = response.data.items;
return westc;
});
},
get: function (westCId) {
if (!westc.length)
_getCache();
for (var i = 0; i < westc.length; i++) {
if (parseInt(westc[i].id) === parseInt(westCId)) {
return westc[i];
}
}
return null;
}
}
});
等等...
同样,必须制造大量的控制器来处理所有这些问题。
对我来说,这似乎不太容易维护,所以我想知道是否有更有效的方法来解决这个问题?
您必须使类别编号成为变量,然后从中构建查询。
从主题中提取的解决方案:
factory('Facedetect', function ($resource) {
return $resource('skyBiometry/facedetect', {}, {
query: { method: 'GET', params: {imageUrl:"http://cdn1-public.ladmedia.fr/var/public/storage/images/dossiers/portrait_w674.jpg"}, isArray: false }
})
});
function IndexCtrl($scope,$routeParams,Facedetect) {
$scope.imageurl = 'http://flepi.net/images/personne-tendue.jpg';
$scope.text = $scope.text = Facedetect.get({imageUrl: $scope.imageurl});
}
使用这样的东西:
app.service(
"angularPostService",
['$http', '$q', function($http, $q) {
return({
serve: serve
});
function serve(data, url) {
var request = $http({
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
url: url,
data: data
});
return( request.then( handleSuccess, handleError ) );
}
function handleError( response ) {
if (! angular.isObject( response.data ) || ! response.data.message) {
return( $q.reject( "An unknown error occurred." ) );
}
return( $q.reject( response.data.message ) );
}
function handleSuccess( response ) {
return( response.data );
}
}]
);
这将为您提供发出http请求的服务。 在任何控制器中注入此服务,并使用来自angular的http ajax调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.