Angular工厂成功和错误回调

Angular factory success and error callback

本文关键字:错误 回调 成功 工厂 Angular      更新时间:2023-09-26

我已经为成功和错误设置了一个回调工厂。然而,当我在控制器中使用它时,我需要总是定义成功和错误函数,如果我不定义错误回调函数,它将无法工作。

当需要使用错误回调时,是否存在可选的方法?

控制器

$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;
}]);

我的建议是将$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)
});

可以使用:

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;
    }]);