0

我以这种方式定义了登录服务:

.factory('Auth', ['$http', '$location', 'sharedProperties', 'CONSTANTS', function ($http, $location, sharedProperties, CONSTANTS) {

    return {
        login: function (username, password) {
            $http.get(CONSTANTS.BASE_URL + '/auth', {
                id: username,
                mdp: password
            }).success(function (data) {
                    sharedProperties.setApiToken(data);
                    $location.path('routes');
                }
            ).error(function (data) {
                    return 'Some error message';
                }
            )
        }

    }
}])

在我的控制器中,如果出现问题,我应该如何获取错误消息?

我试过这样:

$scope.login = function () {

    Auth.login(
        {
            id: "testcorp",
            mdp: "companyPassword"
        }, function (data) {
            console.log(data);

        }
    );
}

但是 console.log(data) 指令没有被调用。

谢谢,

马修。

4

1 回答 1

1

我建议您创建承诺工厂并将承诺返回给控制器。喜欢:

.factory('Auth', ['$http', '$location', 'sharedProperties', 'CONSTANTS', function ($http, $location, sharedProperties, CONSTANTS) {    

    return {
        login: function (username, password) {            
            var data =  $http.get(CONSTANTS.BASE_URL + '/auth', {
                id: username,
                mdp: password
            });

             var deferred = $q.defer();
             deferred.resolve(data);
             return deferred.promise;
        }
    }
}])

之后,从控制器:

        Auth.login("testcorp", "companyPassword")
                    .then(function (result) {
                       $scope.data = result;                           
                    }, function (result) {
                        alert("Error: No data returned");
                    });   

作为参考

Promise代表一个未来,通常是异步操作的未来结果,并允许我们定义一旦该值可用或发生错误时会发生什么。

于 2013-11-01T21:32:20.417 回答