2015-10-04 53 views
0

我设置了一个回调成功和错误的工厂。但是,当我在控制器中使用它时,如果我没有定义错误回调函数,我需要一直定义成功和错误函数,它将不起作用。角度工厂成功和错误回调

有没有办法可以使错误回调可选,当它需要使用。

控制器

$scope.saveUsername = function(){ 
    atFactory.saveUsername($scope, function(){ 
     // this is success 
    }, function(){ 
     // this is error 
    }); 
} 

at.factory('atFactory', ['$http' , function ($http){ 
    var factory = {}; 

    factory.saveUsername = function($scope,callback){ 
     $scope.url = '/member/username'; 
     $scope.post_data = { 
      username : $scope.username 
     }; 
     factory.doPostHttpRequest($scope).success(callback).error(callback); 
    } 

    factory.doPostHttpRequest = function($scope){ 
     return $http({ 
      url : $scope.url, 
      method: 'POST', 
      data: $scope.post_data 
     }) 
    } 

    return factory; 

}]); 
+0

它将工作,但你不知道什么时候一个错误来了。 – Chandermani

+0

尝试像这样做 'return factory.doPostHttpRequest($ scope)'而不是'factory.doPostHttpRequest($ scope).success(callback).error(callback);' –

回答

1

我给你的建议是返回$http承诺回控制器,那么你可以调用您的控制器中的success()(以及可选的error())。

因此,在你的工厂:

factory.saveUsername = function($scope){ 
    $scope.url = '/member/username'; 
    $scope.post_data = { 
     username : $scope.username 
    }; 
    return factory.doPostHttpRequest($scope); 
} 

factory.doPostHttpRequest = function($scope){ 
    return $http({ 
     url : $scope.url, 
     method: 'POST', 
     data: $scope.post_data 
    }) 
} 

然后在你的控制器,你可以这样做:

atFactory.saveUsername($scope) 
.success(function(response) { 
    // success callback (optional) 
}) 
.error(function(error) { 
    // error callback (optional) 
}); 
0

你可以使用:

at.factory('atFactory', ['$http' , function ($http){ 
     var factory = {}; 

     factory.saveUsername = function($scope,successCallBack, errorCallBack){ 
      $scope.url = '/member/username'; 
      $scope.post_data = { 
       username : $scope.username 
      }; 
      return factory.doPostHttpRequest($scope).success(function(){ 
       if(successCallBack){ 
        successCallBack(); 
       } 
      }).error(function(){ 
       if(errorCallBack){ 
        errorCallBack(); 
       } 
      }); 
     } 

     factory.doPostHttpRequest = function($scope){ 
      return $http({ 
       url : $scope.url, 
       method: 'POST', 
       data: $scope.post_data 
      }) 
     } 

     return factory; 

    }]);