Javascript 将新值推送到数组仍然返回空值-AngularJS
我的控制器中有这段代码Javascript 将新值推送到数组仍然返回空值-AngularJS,javascript,angularjs,Javascript,Angularjs,我的控制器中有这段代码 controller('ChallengeCtrl',function($scope,$http){ $scope.challenged = []; $scope.checkVideo = function (video) { var response; console.log(url); return $http.get(url).success(function(data) {
controller('ChallengeCtrl',function($scope,$http){
$scope.challenged = [];
$scope.checkVideo = function (video) {
var response;
console.log(url);
return $http.get(url).success(function(data) {
return data;
}).error(function(data){
return data;
});
}
$scope.challengeMe = function() {
$scope.checkVideo($scope.selectedVideo).then(function(data){
$scope.challenged = data.data;
console.log($scope.challenged); //working
});
}
$scope.printChallenge = function() {
console.log($scope.challenged); //not working, returns [] null
}
});
调用challengeMe()
函数时,我分配了$scope.challenged
的值,并尝试在我的printcreallenge()
函数中调出$scope.challenged
数组中的值,但它返回为null 由于ChallengeMe()是一个异步函数,因此在调用PrintChallenge()方法之前需要一个计时器函数,以便等待数据填充(这是一种错误的方法,因为通常我们不知道在填充数据多少时间后,您可以在ChallengeMe()之后进行WHILE循环)在PrintChallenge()调用之前调用。在WHILE循环中,可以检查$scope.challenged是否为NULL
.then方法中的控制台消息在ChallengeMe()中起作用,因为.then仅在AJAX调用完成后执行。但此时,执行必须进一步移动到PrintChallenge()方法,而不等待数据,因此PrintChallenge()调用中的控制台消息没有任何内容。假设您在页面加载时调用了
challengeMe()
和PrintChallenge()
,发生此问题的原因是challengeMe()
有一个异步函数调用,该调用填充$scope.challenged
中的数据。当异步调用正在进行时,您正在执行函数ieprintChallenge()
,没有时间延迟,并且由于调用尚未在challengeMe()
中完成,因此$scope.challenged
不会填充任何数据
要解决此问题,您可以添加一个
$timeout
,也可以按照您在challengeMe()中所做的方式记录您的值。
尝试关闭。然后用}关闭代码>不仅仅是}
。如果你不能正确结束它,它将抛出一个错误。哦,一个打字错误,它实际上是用}结束的代码>在我的实际代码中。感谢您指出..您有任何日志错误吗?可能重复@slverstone,这是因为$scope.$apply()
是错误的。