我在控制器中通过名称tst
定义一个变量,我在一个函数中通过名称GetOrders
给出一些值,但是当我在另一个函数{{1}中得到tst
时它是未定义的,没有价值,这就是我所做的:
GetTotalValueOfProducts
有什么问题?
答案 0 :(得分:1)
这是因为js是异步的。
您正在执行GetOrders()
正在进行http请求,这需要时间,但在http请求完成之前,您正在调用GetTotalValueOfProducts
,这使得它未定义。
<script>
app.controller('OrderController', function ($scope, $http) {
$scope.quantity = 1;
$scope.Orders = {};
var tst ;
GetTotalValueOfProducts = function () {
//but here 'tst' is undefined!!!
var p = tst;
}
GetOrders = function () {
$http.get('/Order/GetAllOrders').success(function (response) {
$scope.Orders = response;
//here i set tst, and tst has value, i checked it has value and it's not undefined
tst = response;
GetTotalValueOfProducts();
});
}
GetOrders();
});
</script>
以上应该给你预期的结果。不确定何时要调用该功能。
答案 1 :(得分:1)
您好AngularJS都是异步的,所以在成功回调之前调用GetTotalValueOfProducts();
会从http返回任何值。回调完成后,您必须调用您的函数。
您可以使用$ q的AngularJS来完成它。这是链接$q
答案 2 :(得分:1)
这是一个经典的JavaScript异步问题。第二个函数在第一个函数中的promise被解析之前执行。
答案 3 :(得分:0)
你应该致电
GetTotalValueOfProducts();
成功回调$ http服务。像这样更改代码
<script>
app.controller('OrderController', function ($scope, $http) {
$scope.quantity = 1;
$scope.Orders = {};
GetOrders = function () {
$http.get('/Order/GetAllOrders').success(function (response) {
$scope.Orders = response;
GetTotalValueOfProducts(response)
});
}
GetOrders();
GetTotalValueOfProducts = function (tst) {
var p = tst;
}
});
</script>
答案 4 :(得分:-1)
尝试将tst
变量附加到内部$scope
对象中。
的修改
没有看到这些功能是异步的,这是草率的。您应该将结果提取为:
尝试将tst
变量附加到内部$scope
对象中。
编辑
没有看到这些功能是异步的,这是草率的。您应该将结果提取为。
app.controller('OrderController', function ($scope, $http) {
$scope.quantity = 1;
$scope.Orders = {};
$scope.tst;
GetOrders = function () {
$http.get('/Order/GetAllOrders').success(function (response) {
$scope.Orders = response;
$scope.tst = response;
GetTotalValueOfProducts();
});
}
GetOrders();
GetTotalValueOfProducts = function () {
//but here 'tst' is undefined!!!
var p = $scope.tst;
}
});
甚至尝试使用$q