【问题标题】:Factory method returning undefined value工厂方法返回未定义的值
【发布时间】:2014-09-06 04:10:58
【问题描述】:

我正在使用工厂配方从控制器调用方法,这是工厂定义。

app.factory('AccountService', function ($http){
    var factory = {};

    factory.getAuthenticate = function (credentials) {
        $http({
            method: 'post',
            url: '/api/login',
            data: credentials
        }).success(function (data, status, headers, config){
            return true;
        }).error(function (data, status, headers, config){
            return false;
        });
    }

    return factory;
});

当我从我的一个控制器调用 getAuthenticate 方法时,

app.controller('DefaultController', function ($scope, $location, AccountService){
    $scope.login = function(){
        alert(AccountService.getAuthenticate($scope.credentials));
        // if(AccountService.getAuthenticate($scope.credentials)) {
        //     $location.path('/dashboard');
        // }
    }
});

它总是根据 http 调用返回 undefined 而不是 true 或 false。知道我缺少什么吗?

【问题讨论】:

  • 你的函数没有返回任何东西,第二个你正在做 asyc 调用,所以你的函数将在 ajax 请求完成之前返回
  • 正如帕特里克所说,异步函数不会返回这样的值,要么返回承诺,要么使用回调。

标签: javascript angularjs


【解决方案1】:

$http 方法自动返回一个承诺。所以你应该在控制器中处理这个。你的代码应该是这样的:

    app.factory('AccountService', function ($http){
        var factory = {};

        factory.getAuthenticate = function (credentials) {
            return $http({
                method: 'post',
                url: '/api/login',
                data: credentials
            });
        };

        return factory;
    });



app.controller('DefaultController', function ($scope, $location, AccountService){
    $scope.login = function(){
        AccountService.getAuthenticate($scope.credentials)
            .success(function (response) {
                alert('Everything went better than expected :)');
                $location.path('/dashboard');
            })
           .error(function (error) {
                alert(error);

            });
    };
});

【讨论】:

  • 您的回调应该从控制器中抽象出来并放入工厂。只有在使用服务进行调用后,您才应该在控制器内部进行数据绑定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多