Javascript 如何使用angularjs从异步调用中定义全局变量?
我想在控制器函数外部使用单_视频变量。它在第一个控制台日志中打印良好。但是,它在控制器功能之外的第二个console.log中给出了一个未定义的错误。因为异步性Javascript 如何使用angularjs从异步调用中定义全局变量?,javascript,angularjs,asynchronous,Javascript,Angularjs,Asynchronous,我想在控制器函数外部使用单_视频变量。它在第一个控制台日志中打印良好。但是,它在控制器功能之外的第二个console.log中给出了一个未定义的错误。因为异步性 var single_video; var app = angular.module('myApp', []); app.controller('randomVideo', function($scope, $http) { var onSuccess = function(response){ $scop
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);
您可以创建一个在
success
回调函数中调用的函数,将变量作为参数传递给函数:
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);
test(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);
});
function test(a)
{
console.log('2nd ID='+a);
}
在工厂服务中定义全局变量,并在需要时将服务注入角度控制器中。(注意:试着把一切都放在生活中) 使用服务的全局变量,下面是一个示例:
var myApp = angular.module('myApp',[]);
myApp.factory('MySvc', function() {
return {
name : 'your name'
};
});
在控制器中:
function MyCtrl($scope, MySvc) {
$scope.name = MySvc.name;
}
您标记为“Second console.log”的实际上是第一个console.log。你所要求的是根本不可能的。“second”console.log永远不能给你这个值。@KevinB它们是一样的,但我在第二个控制台中得到一个“undefined”错误。由于异步性,在定义单_视频之前打印第二个console.log。有没有办法用回调函数等来实现这一点。我的jacascript背景很差。你必须在回调运行后访问全局变量。因此,访问全局变量的代码必须在回调中或从回调中调用。但是现在不需要全局变量了,这样看吧。该全局变量最终将包含您希望它包含的值,您只需等待它被填充后才能访问它。但是,要知道何时填充它,您需要使用一个成功回调,该回调将该值作为参数,从而使全局变量冗余。如果您在多个位置需要该值,这就是从
$http
方法返回的承诺的目的。从定义上讲,您所要求的是不可能的。你为什么不重新表述你的问题,让它揭示出你真正想解决的问题呢。异步回调后的代码管理?如果您在严格模式下定义控制器(您应该这样做!),这将不起作用。