我正在编写一个应用程序,在其中我必须编写一些执行AJAX操作的函数。我希望将所有这些功能放在一个模块中的一个服务中,并在需要时在控制器中调用这些功能。我知道它可以使用Angular JS模块完成,但没有正确的方法来解决它。俱乐部在Angular JS中执行AJAX操作作为一项服务的一些方法
任何人都可以帮助我吗?如果你能用一个例子来演示,那将是非常棒的。
我正在编写一个应用程序,在其中我必须编写一些执行AJAX操作的函数。我希望将所有这些功能放在一个模块中的一个服务中,并在需要时在控制器中调用这些功能。我知道它可以使用Angular JS模块完成,但没有正确的方法来解决它。俱乐部在Angular JS中执行AJAX操作作为一项服务的一些方法
任何人都可以帮助我吗?如果你能用一个例子来演示,那将是非常棒的。
我其实在前段时间做了一个简短的blog entry。
基本例如:
var app = angular.module('myApp', []);
//create a service:
app.factory('myService', function($http) {
return {
getFoo: function(success) {
$http.get('/Foo/Url/Here').success(success);
}
}
});
//use it in a controller
app.controller('MyCtrl', function($scope, myService) {
myService.getFoo(function(data) {
$scope.foo = data;
});
});
使用$ HTTP与$ Q为雨衣结果的实施例。
var app = angular.module('myApp', []);
//create a service:
app.factory('myService', function($http, $q) {
return {
getFoo: function() {
var deferred = $q.defer();
$http.get('/Foo/Url/Here').success(function(data) {
deferred.resolve(data);
}).error(function(){
deferred.reject();
});
return deferred.promise;
}
}
});
//use it in a controller
app.controller('MyCtrl', function($scope, myService) {
$scope.foo = myService.getFoo();
});
在第二个例子中,是否有理由创建一个promise('deferred')而不是使用$ http返回的承诺?另外,你有没有想过如何修改代码,以便控制器可以知道是否存在$ http错误(我认为写入时,$ scope.foo将在发生错误时为空)。 – 2013-02-27 17:30:29
对于这个问题+1 ......所以它可以用作'$ scope.foo = myService.getFoo()'而'foo'只包含数据。否则,'foo'将是一个带有ajax配置,状态*和*数据的对象。个人喜好我猜。使用时清洁。 – 2013-02-27 18:58:54
清洁,好吧,但它似乎无法处理错误。我目前的想法是,控制器是处理错误(而不是服务)的更好的地方,因为我们可能想要以某种方式修改视图,让用户知道$ http是否失败。 – 2013-02-27 19:08:32
见皮特的回答是:http://stackoverflow.com/questions/12505760/angularjs-processing-http-response-in-service/12513509#12513509在你的情况下,创建多个异步()函数,每个AJAX操作一个。 – 2013-02-27 16:43:58
是的......这是另一种方式来做到这一点......吨的方式来剥皮这只猫。 – 2013-02-27 16:47:45
Mark,Benjamin - 非常感谢你们! – 2013-02-27 16:58:05