2014-04-18 111 views
1

嗨,我正在写在angularjs一些代码的工作人员删除repetitve功能,但我必须从控制器到其他例如使重复的代码,让我们假设我们有两个控制器editProductController和newProductCtrl,我们要调用保存方法我的编码风格会是这样的:如何从angularjs控制器

var editProductController = function($scope , product){ 
$scope.product = product; 
.... 
$scope.save = function(){ 
product.$save().then(onSuccess , onError);} 
.... 
function onSuccess(response){ 
    if(response.error === true){ 
      $scope.productForm.name.$dirty = true; 
      $scoe.productForm.name.$invalid = true; 
      $scope.productForm.name.$error.server = response.errors.name; 
      ......} 
} 
function onError(error){ 
.... 
}}; 

,为newProductController

var newProductController = function($scope , Product){ 
$scope.product = {id : null , version :1, ...}; 
.... 
$scope.save = function(){ 
_.extend($scope.product , new Product()); 
product.$save().then(onSuccess , onError);} 
.... 
function onSuccess(response){ 
    if(response.error === true){ 
      $scope.productForm.name.$dirty = true; 
      $scoe.productForm.name.$invalid = true; 
      $scope.productForm.name.$error.server = response.errors.name; 
      ......} 
} 
function onError(error){ 
.... 
}}; 

当 “产品” 是一个angularjs资源服务。所以我的问题将是我怎样才能更好的编码风格,以消除重复的代码?

回答

0

最好实践的研究将包括在角服务或工厂的重复的功能。有不同的方式和编码风格。见docs

下面是一个例子

app.service('Product', [function(){ 
    return {aProductMethod: ... , anotherProductMethod: ...}; 
}]); 

,然后在你的控制器注入服务。

+0

理想的情况下大部分的业务逻辑应该是服务。我喜欢将控制器视为逻辑和视图之间的“胶水”。 – NicolasMoise

+0

对不起,我已更新我的问题更清楚。首先,我想以同样的方式像你这样做,但在我的情况,我必须应对onSucces在$范围和onError方法中怎样处理这种计算策略在服务端 – ziedTn

+0

是的,我明白了,你不能访问内部$范围一个服务,所以你必须找到一种方法来分开逻辑和逻辑,你将把它放在你的服务中。 – NicolasMoise