Javascript AngularJS:函数内的变量$scope在函数外似乎未定义
我是AngularJS的新手,我被困住了:\需要帮助,请 下面代码的目的是从数据库中获取特定数据(整数),以便构建圆环图。 我运行函数dataforGraphs()以获得该值。但是,在函数之外,我“释放”了这个值 (在代码期间,我发表了一些评论,以便更好地解释情况) 我已经尝试返回$scope.ammontOfficedOrders,但仍然没有返回任何内容。这可能是作用域继承的问题吗?如果是,我应该怎么做才能解决这个问题?如果没有。。。不管怎样,还是帮帮我吧:DJavascript AngularJS:函数内的变量$scope在函数外似乎未定义,javascript,angularjs,inheritance,angularjs-scope,Javascript,Angularjs,Inheritance,Angularjs Scope,我是AngularJS的新手,我被困住了:\需要帮助,请 下面代码的目的是从数据库中获取特定数据(整数),以便构建圆环图。 我运行函数dataforGraphs()以获得该值。但是,在函数之外,我“释放”了这个值 (在代码期间,我发表了一些评论,以便更好地解释情况) 我已经尝试返回$scope.ammontOfficedOrders,但仍然没有返回任何内容。这可能是作用域继承的问题吗?如果是,我应该怎么做才能解决这个问题?如果没有。。。不管怎样,还是帮帮我吧:D 非常感谢 您正在AJAX调用(异
非常感谢 您正在AJAX调用(异步)中更新AmmonOfficeOrders,并试图在更新之前(即在收到响应之前)在脚本中访问它。因此,您无法获得该值 因此,您应该将代码即$scope.data移动到成功回调函数中
.success(function (data) {
$scope.ammountOfFinishedOrders = data.GetAmmountOfFinishedOrdersResult;
// move your code here
})
.success(function (data) {
$scope.ammountOfFinishedOrders = data.GetAmmountOfFinishedOrdersResult;
updateScope();
})
var updateScope = function() {
// your code here
};
您还可以在success回调函数中调用函数,并在该函数中执行更新
.success(function (data) {
$scope.ammountOfFinishedOrders = data.GetAmmountOfFinishedOrdersResult;
// move your code here
})
.success(function (data) {
$scope.ammountOfFinishedOrders = data.GetAmmountOfFinishedOrdersResult;
updateScope();
})
var updateScope = function() {
// your code here
};
问题的本质是异步的
GraphService.GetAmountOfficeOrders()是一个异步调用,这意味着您直接进入下一行代码,即:
//HOWEVER... here is undefined
console.log("value 2:", $scope.ammountOfFinishedOrders)
只有在承诺得到解决(您从服务器得到响应)之后,才会触发成功/错误,并且进入这些代码块
关于做什么,这取决于你需要实现什么。如果你需要分配一个变量,那么就这样做。如果你需要回到某个方面,那就需要一种不同的方法。这很简单,朋友:-)
您调用了GraphService
,这是一种异步服务,当它返回它时,您的console.log(“值2:”,$scope.ammontoffinishedorders)
和console.log(“值3:”,$scope.ammontoffinishedorders)
已经被明确执行,它将是未定义的
要克服这一点,你可以这样做
$scope.$watch(ammountOfFinishedOrders,function(newVal){
$scope.data = [
newVal, 4, 1, 3, 2, 1, 4
];
}))
或者把它放在你的成功里
GraphService.getAmmountOfFinishedOrders()
.success(function (data) {
$scope.ammountOfFinishedOrders = data.GetAmmountOfFinishedOrdersResult;
$scope.data = [
$scope.ammountOfFinishedOrders, 4, 1, 3, 2, 1, 4
];
//this console.log shows me the value 3. Excellent!
console.log("value 1:", $scope.ammountOfFinishedOrders)
})
.error(function (error) {
$scope.status = 'Unable to load data:' + error.message;
});
希望有帮助:)您的问题是由于异步方法调用造成的。显然,您不会在“dataforGraphs”方法下面得到结果
您可以通过回调方法更好地处理此问题。当GraphService方法执行时,它将调用“success”或“error”回调,您可以从那里调用回调方法,如下所示
function dataforGraphs(SuccessCallBack, FailedCallBack) {
GraphService.getAmmountOfFinishedOrders()
.success(function (data) {
SuccessCallBack(data.GetAmmountOfFinishedOrdersResult);
})
.error(function (error) {
$scope.status = 'Unable to load data:' + error.message;
FailedCallBack(error);
});
};
function SuccessCallBack(result){
//do your success logic here
}
function FailedCallBack(error){
}
非常感谢。成功了!我现在可以停止用头撞击计算机了:D我没有意识到异步效应。再次感谢。@nikhil+1的计时:)嘿,谢谢:)我先找到了nikhil的答案,它成功了。不过,我对您建议的$scope.$watch方法很好奇。稍后,我将确定它在我的示例中是否有效,因为它的目的是用来自de DB的值填充数组“data”,即:而不仅仅是$scope.data=[$scope.ammontoffinishedorders,4,1,3,2,1,4];我将有$scope.data=[$scope.ammontofficientedorders,$scope.ammontofdelayedorders,$scope.ammontofccanceledorders];也许我必须用newVal1,newVal2更新值。。。有可能吗?嘿,你可以找$watchGroup这里是doc谢谢!:)这有助于我理解这个问题。我首先选择了nikhil解决方案,它成功了。以后我会试试你的方法。谢谢你的回答:)