2013-02-27 10 views
1

我正在编写一个应用程序,在其中我必须编写一些执行AJAX操作的函数。我希望将所有这些功能放在一个模块中的一个服务中,并在需要时在控制器中调用这些功能。我知道它可以使用Angular JS模块完成,但没有正确的方法来解决它。俱乐部在Angular JS中执行AJAX操作作为一项服务的一些方法

任何人都可以帮助我吗?如果你能用一个例子来演示,那将是非常棒的。

+2

见皮特的回答是:http://stackoverflow.com/questions/12505760/angularjs-processing-http-response-in-service/12513509#12513509在你的情况下,创建多个异步()函数,每个AJAX操作一个。 – 2013-02-27 16:43:58

+0

是的......这是另一种方式来做到这一点......吨的方式来剥皮这只猫。 – 2013-02-27 16:47:45

+0

Mark,Benjamin - 非常感谢你们! – 2013-02-27 16:58:05

回答

2

我其实在前段时间做了一个简短的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(); 
}); 
+1

在第二个例子中,是否有理由创建一个promise('deferred')而不是使用$ http返回的承诺?另外,你有没有想过如何修改代码,以便控制器可以知道是否存在$ http错误(我认为写入时,$ scope.foo将在发生错误时为空)。 – 2013-02-27 17:30:29

+0

对于这个问题+1 ......所以它可以用作'$ scope.foo = myService.getFoo()'而'foo'只包含数据。否则,'foo'将是一个带有ajax配置,状态*和*数据的对象。个人喜好我猜。使用时清洁。 – 2013-02-27 18:58:54

+0

清洁,好吧,但它似乎无法处理错误。我目前的想法是,控制器是处理错误(而不是服务)的更好的地方,因为我们可能想要以某种方式修改视图,让用户知道$ http是否失败。 – 2013-02-27 19:08:32

相关问题