我已经为这样的$ http请求定义了一个自定义服务:
app.factory("ajaxCall",["$http",'$q',function($http,$q){
return {
getData : function(url){
var deferred = $q.defer();
$http.get(url).then(function(data)
{
deferred.resolve(data);
})
return deferred.promise;
}
}
}]);
我在决心中使用此服务,如:
resolve:{
tableData: function(ajaxCall){
return {
ajaxCall.getData({/* A Url */}); //line a
}
}
}
但是它给了我一个错误:a行的意外标识符。我做错了什么?
答案 0 :(得分:1)
$http.get(url)
期望url
为字符串,但您尝试将该字符串包装在{}
resolve
语法也不正确。
尝试
resolve: {
tableData: function(ajaxCall) {
return ajaxCall.getData( /* A Url */ );
}
}
此外,您在工厂中使用了承诺反模式,可以简化为:
app.factory("ajaxCall", ["$http", '$q',
function($http, $q) {
return {
getData: function(url) {
return $http.get(url).then(function(response) {
return response.data;
});
};
}
}
]);
答案 1 :(得分:0)
确保你写的是有效的javascript(你在那边有太多花括号):
resolve: {
tableData: function(ajaxCall) {
return ajaxCall.getData('http://....');
}
}
答案 2 :(得分:0)
你可以使用app.factory或app.service。例如:
app.factory('service', ['$http', function ($http) {
return {
save: function (data) {
return $http({
url: 'your url is here',
method: 'POST',
data: data
})
},
};
}]);
然后在角度控制器中:
$scope.addButtonClick = function () {
var info = {};
info ["Id"] = $scope.Id;
info ["name"] = $scope.name;
info ["pwd"] = $scope.pwd;
service.save(info )
.success(function (data) {
$scope.reset();
})
.error(function (xhr) {
$ngBootbox.alert('Error in saving data');
});
}
}