2015-10-04 50 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; 

    }]);