嵌套控制器和函数 - 返回值未定义

时间:2014-04-23 19:42:09

标签: javascript ajax angularjs

我有一个包含xhr函数的主控制器,就像这样

app.controller('mainCtrl', ['$scope', '$http', function ($scope, $http) {

    $scope.xhr = function(requestData) {

        var ajax = "/ajax/";

        $http({ url: ajax, data: requestData, method: 'POST' })
        .success(function(data) {
                console.log(data); // data shows up in the console,, but after the undefined from directive controller
                return data;
        })
        .error(function(err){"ERR", console.log(err)});
    }

}]);

然后我有一个指令,在它自己的控制器中使用主控制器的xhr函数,就像这样

app.directive("register", function ($http) {
return {
    restrict: "E",
    controller: function ($scope, $element, $attrs) {

        $scope.register = {};
        $scope.request = {};
        $scope.response = {};

            $scope.createAccount = function () {

                $scope.request= {
                    action: "register",
                    data: $scope.register
                }

                $scope.response = $scope.xhr($scope.request);
                console.log($scope.response);
            }
    },
    templateUrl: "register.html"
}
});

当我在指令控制器中触发 $ scope.createAccount 函数时,返回值未定义。我无法弄清楚原因。感觉就像我遗失了一些明显的东西。

1 个答案:

答案 0 :(得分:1)

$http服务返回一个承诺,并且在验证承诺已解决之前,您正在为$scope.response分配值。这意味着在声明时它是未定义的。

xhr方法中,您应该返回$http来电。然后,在你的指令中:

$scope.xhr($scope.request).then(function(data){ 
  $scope.response = data; 
});