我想在控制器功能之外使用single_video变量。它在第一个控制台日志中打印良好。但是它在第二个console.log中给出了single_video未定义的错误,该错误在控制器函数之外。我在javascript和angularjs都很穷。
var single_video;
var app = angular.module('myApp', []);
app.controller('randomVideo', function($scope, $http) {
var onSuccess = function(response){
$scope.video = response.data;
single_video = $scope.video;
//First console.log
console.log('1st ID='+single_video.yt_id);
};
var onError = function(reason){
$scope.error = "There is an error about getting random_video.php";
};
$http.get("http://www.ytmdb.com/ytvideo/api/random_video.php")
.then(onSuccess, onError);
});
//Second console.log
console.log('2nd ID='+single_video.yt_id);
答案 0 :(得分:0)
即使声明了single_video,也没有定义它,即它没有定义调用第二个console.log()时的任何值。
实际上,你的第一个console.log被调用的时间晚于第二个,因为你刚刚定义了一些函数,但没有调用它们,因此没有设置值,比你调用“second console.log”更快。
答案 1 :(得分:0)
您的变量没有问题。 我想你的第二个 console.log 在第一个之前被调用。
你应该谷歌" javascript async"或者" javascript回调"了解异步代码的工作原理。
总结一下,当你做" $ http.get"您向服务器发出HTTP请求,该请求将在一定时间后响应。当服务器响应时,您的" onSuccess"被调用,你的变量被设置。不是之前。
与此同时,第二次 console.log 将在初始化HTTP请求后立即执行 - 因此在服务器响应和" onSuccess"之前回调。