我有一个包含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 :(得分:1)
$http
服务返回一个承诺,并且在验证承诺已解决之前,您正在为$scope.response
分配值。这意味着在声明时它是未定义的。
在xhr
方法中,您应该返回$http
来电。然后,在你的指令中:
$scope.xhr($scope.request).then(function(data){
$scope.response = data;
});