2014-04-23 28 views
0

我有一个包含一个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功能指令的控制器,则返回值是不确定的。我无法弄清楚为什么。感觉有些事情显而易见,我错过了。

+0

您正在记录'responseData',但将值赋给'response'? – adrichman

+0

这是一个错字,我会纠正,在实际的代码是正确的 – GRowing

回答

1

$http服务返回承诺,并且您在验证承诺已解决之前将值分配给$scope.response。这意味着它在申报时是未定义的。

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

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

嗯,,我有点理解..工作。 – GRowing